2013-08-07 41 views
0

我使用的是SQL Server 2008的SQL服務器:整理多列不正確的語法

SELECT resultTable.OrderNumber, 
       resultTable.ProjectId, 
       resultTable.BatchId, 
       resultTable.CustomerId, 
       resultTable.City, 
       resultTable.Street, 
       resultTable.PostalCode, 
       resultTable.Country, 
       resultTable.CreatedDate, 
       resultTable.Name, 
       COUNT(*) OVER() as OrdersCount, 
       Row_Number() OVER 
        (ORDER BY 
        CASE WHEN @sortBy = 'OrderNumber' 
        THEN resultTable.OrderNumber END, 
        CASE WHEN @sortBy = 'ProjectId' 
        THEN resultTable.ProjectId END, 
        CASE WHEN @sortBy = 'Address' 
        THEN resultTable.Country, resultTable.City, resultTable.Street, resultTable.PostalCode END, 
        CASE WHEN @sortBy = 'CreatedDate' 
        THEN resultTable.CreatedDate END) as RowIndex 
FROM resultTable 

該查詢火災近語法錯誤「」

THEN resultTable.Country, resultTable.City, resultTable.Street, resultTable.PostalCode END, 

如果我以後刪除列第一個「,」一切都好,但我想按地址排序,它由4列組成。大概我在這裏看不到什麼簡單的東西。

PS:@sortBy只是一個字符串參數。

+1

案例返回表達式。你不能有'resultTable.Country,resultTable.City,resultTable.Street,resultTable.PostalCode'作爲結果。當@sortBy =「訂單號碼」,然後ROW_NUMBER()OVER(由resultTable.OrderNumber順序)當...' –

+2

你可能想扭轉局面在案件排序時的一些參數爲空,長/短,一般在不可預知的順序(但很少) –

回答

3

嘗試是這樣的:

ORDER BY 
    CASE WHEN @sortBy = 'OrderNumber' 
    THEN resultTable.OrderNumber END, 
    CASE WHEN @sortBy = 'ProjectId' 
     THEN resultTable.ProjectId END, 
    CASE WHEN @sortBy = 'Address' 
    THEN resultTable.Country END, 
    CASE WHEN @sortBy = 'Address' 
    THEN resultTable.City END, 
    CASE WHEN @sortBy = 'Address' 
    THEN resultTable.Street END, 
    CASE WHEN @sortBy = 'Address' 
    THEN resultTable.PostalCode END, 
    CASE WHEN @sortBy = 'CreatedDate' 
    THEN resultTable.CreatedDate END 
+0

不會第一端 - 端的選擇,然後我會在最後通過的'@sortBy第一次出現的只是排序=「Address'' –

+2

@AntonBelev請將這是一個單'CASE'有一堆'WHEN'部分,但在這裏,我們有幾個'CASE'每個在它自己的工作陳述。 –

+0

是的,你是對的:)我比podiluska的更喜歡你的答案。此外,我選擇兩個或兩個以上的答案,我優先考慮那些代表性較低的人。 –

3

你可能想

CASE WHEN @sortBy = 'Address' 
     THEN 
     isnull(resultTable.Country,'') 
     + isnull(resultTable.City,'') 
     + isnull(resultTable.Street,'') 
     + isnull(resultTable.PostalCode,'') 
     end 
+0

是的,這是似乎工作 –

+2

它的工作原理'案件,但它會給出不正確的: – VitaliyG

0

假設@sortBy只能有這4個值

CASE WHEN @sortBy = 'OrderNumber' THEN resultTable.OrderNumber END, 
CASE WHEN @sortBy = 'ProjectId' THEN resultTable.ProjectId END, 
CASE WHEN @sortBy = 'CreatedDate' THEN resultTable.CreatedDate END, 
CASE WHEN @sortBy = 'Address'  THEN resultTable.Country END, 
resultTable.City, resultTable.Street, resultTable.PostalCode