2012-10-25 51 views
3

其列,我使用MS-SQL,我有這樣的一個表:如何ORDER BY沒有SELECT

Count Code 
1  A 
2  C 
3  A 
4  B 
5  C 
6  B 

我只需要獲得代碼列中不同行,但我需要保持該列的排列順序來創建一個逗號分隔的字符串是這樣的:

A, C, B 

我曾嘗試下面的代碼沒有得到消息145的SQL錯誤,等級15 - ORDER BY項目必須出現在選擇列表中,如果指定了SELECT DISTINCT。

SELECT @tlist = ISNULL(@tlist+', ','') + Code 
FROM (SELECT DISTINCT t.Code 
    FROM @Table t) 

,但我得到的,B,C

回答

4

所以,你不想做distinct。你想group by

select t.code 
from @Table t 
group by t.code 
order by min(count) 

您可以通過select子句中沒有提及列的次序。

要獲得逗號分隔的列表作爲一個變量,使用這種技術:

select stuff((select ', '+t.code 
       from @Table t 
       group by t.code 
       order by min(count) 
       for xml path ('') 
      ), 1, 2, '') 

Order by子查詢通常是不確定的。而且,按順序將列表連接在一起的方法不能保證能夠正常工作。

+0

通過使用group by作爲子查詢,我收到錯誤消息1033,級別15 - ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效,除非還指定了TOP或FOR XML。但是,當我在SELECT和t.code之間添加TOP 100時,它可以工作。 –

3

爲了它們的輸出在你的子查詢

SELECT DISTINCT t.Code 
FROM @Table t 
ORDER BY t.Code 
+0

。 。提問者似乎希望按第一列進行排序,而不是按代碼按字母順序排列。 –

+0

添加ORDER BY t.Code會引發錯誤消息1033,級別15,除非還指定了TOP或FOR XML,否則ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效。 –

+0

嘗試,'SELECT @tlist = ISNULL(@ TLIST + '', '')+代碼 FROM \t( \t \t SELECT CODE \t \t FROM \t \t( \t \t \t SELECT DISTINCT t.Code \t \t \t FROM @Table噸 \t \t)XX \t \t ORDER BY CODE \t)' –