2010-08-24 2 views
2

У меня есть таблица CSFT_SuggestionItem с перевалы, как:SQL Server 2005 - Ряды в Cols

SuggestionItemID Title    Description, etc. 
------------------------------------------------------------ 
1     Item 1    Do more work 
2     Item 2    I think more is good 

Для каждого SuggestionItem, может несколькими "Приложения", где он может быть связан, так что я CSFT_SuggestionItemApplication

SuggestionItemID ApplicationID 
---------------------------------- 
1     1 
1     2 
2     1 

И у меня есть CSFT_Application таблица

ApplicationID  Description 
---------------------------------- 
1     Spring 
2     Summer 
3     Fall 
4     Winter 

Я хочу, чтобы мой выход выглядеть как т его:

SuggestionItemID  Applications 
---------------------------------- 
1     Spring, Summer 
2     Spring 

Я знаю, что смогу это сделать путем петли. Но есть ли лучший способ в Sql server 2005? Может быть, COALESCE, PIVOT и т.д.

ответ

1

Использование:

SELECT DISTINCT 
     sia.SuggestionItemID, 
     STUFF((SELECT ','+ a.description 
       FROM CSFT_Application a 
       JOIN CSFT_SuggestionItemApplication b ON b.applicationid = a.applicationid 
       WHERE b.suggestionitemid = sia.suggestionitemid 
      GROUP BY a.description 
      FOR XML PATH('')), 1, 1, '') AS applications 
    FROM CSFT_SuggestionItemApplication sia 

Alternate с помощью GROUP BY:

SELECT sia.SuggestionItemID, 
     STUFF((SELECT ','+ a.description 
        FROM CSFT_Application a 
        JOIN CSFT_SuggestionItemApplication b ON b.applicationid = a.applicationid 
       WHERE b.suggestionitemid = sia.suggestionitemid 
       GROUP BY a.description 
       FOR XML PATH('')), 1, 1, '') AS applications 
    FROM CSFT_SuggestionItemApplication sia 
GROUP BY sia.SuggestionItemID 
+0

, что не работает. Он возвращает 2 строки для SuggestionItemID = 1. Может быть, группа должна быть другой ??? –

+0

@Patrick From IBank: он вернет две строки для 'SuggestionItemID = 1', если вы забыли' DISTINCT' –

+0

. Это не сработало. Здесь позвольте мне представить реальные имена таблиц: SELECT DISTINCT sia.SuggestionItemID, STUFF ((SELECT '' + a.description ОТ CSFT_Application ГДЕ a.applicationid = sia.ApplicationID GROUP BY a.description FOR XML PATH ('')), 1, 1, '') AS CSFT_Application FROM CSFT_SuggestionItemApplication sia –