Объединить с ЗАКАЗАТЬ - PullRequest
1 голос
/ 08 июля 2010

У меня есть таблица

tblSomeData

    OrderOccurance     ID   Data
    --------------     --   ----
    1                  1    HTMedia
    2                  1    Hedge
    3                  1    Bowing
    4                  1    FonWirelessLtd  

Первый столбец "OrderOccurance" указывает, в каком порядке элементы, т.е. данные будутпоявляются в конечном выводе

Ожидаемый вывод будет

ID  Data
--  -----
1   HTMedia,Hedge,Bowing,FonWirelessLtd

Я выполнил следующую программу

Select 
    ID
    , Data = stuff((Select ',' + Cast(Data As Varchar(20)) From tblSomeData t2 
          Where t2.ID = t1.ID for xml path('')),1,1,'')
From tblSomeData t1
Group by t1.ID

Я получаювыводится как

ID  Data
--  -----
1   Bowing,FonWirelessLtd,Hedge,HTMedia

Кажется, что FOR XML PATH () сортирует сам, а затем выполняет конкатенацию.

Как получить ожидаемый результат.

Я использую SQL Server 2005.

Спасибо

1 Ответ

1 голос
/ 08 июля 2010

Если вы хотите заказать, вам нужно указать SQL Server, по какому столбцу упорядочить, - в вашем текущем запросе нет предложения ORDER BY.Просто добавьте это, и у вас все будет хорошо:

SELECT
    ID, 
    Data = STUFF(
              (SELECT ',' + CAST(Data As VARCHAR(20)) 
               FROM dbo.tblSomeData t2 
               WHERE t2.ID = t1.ID 
               ORDER BY OrderOccurance
               FOR XML PATH('')), 1, 1, '')
FROM 
   dbo.tblSomeData t1
GROUP BY
   t1.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...