2012-10-09 103 views
0

我有sql查詢,其中我希望按特定列返回具有不同值順序的行。 喜歡說,我想從位置id的ordertable秩序巴克諾諾disntict。如果指定SELECT DISTINCT,則ORDER BY項必須出現在選擇列表中

我曾嘗試谷歌還沒有,但能夠找出解決方案

ORDER BY items must appear in the select list if SELECT DISTINCT is specified. 

那我該怎麼每次我嘗試過一次。

不使用不同的我得到的輸出,但使用此查詢

Select Batchno,LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END, [LocationId] 

重複行,如果我用不同的它給了我錯誤,則它們查詢我想出來的時候。

Select distinct CAST(Batchno as Varchar(MAX)),LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END,[LocationId] 

Select distinct CAST(Batchno as Varchar(MAX)),LocationId from Ordertbl order by case when[LocationId] =3 THEN 0 ELSE 1 END,[LocationId],[Batchno] 

所以這事我試過,但沒有luck.please幫助我。

+0

「Batchno」的數據類型是什麼?你爲什麼把它轉換成'Varchar(MAX)'? –

回答

3
DISTINCT

不允許在ORDER BY任何表達式,也沒有在SELECT列表(即使,如在這種情況下,表達只能爲每個不同的行產生一個特定的值)。您可以使用。

SELECT Batchno, 
     LocationId 
FROM Ordertbl 
GROUP BY Batchno, 
      LocationId 
ORDER BY CASE 
      WHEN[LocationId] = 3 THEN 0 
      ELSE 1 
      END, 
      [LocationId] 
相關問題