SQL 2005 группировка данных, которая является динамической - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть данные, которые выглядят так

Investor    Contact
IBM           James  
IBM           Dean  
IBM           Sean  
Microsoft     Bill  
Microsoft     Steve

Мне нужны данные, чтобы выглядеть так

Investor     Contact
IBM          James,Dean,Sean  
Microsoft    Bill,Steve  

ИЛИ, если вышеупомянутое невозможно

Investor        Contact1  Contact2   Contact3  ...
IBM             James      Dean        Sean  
Microsoft        Bill      Steve

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010

Это должно работать:

SELECT Investor, 
STUFF((
    SELECT ',' + convert(nvarchar(50), Contact) 
    FROM Investors I2
    WHERE I2.Investor = I1.Investor
    FOR XML PATH('')
), 1, 1, '') Contacts
FROM Investors I1
GROUP BY Investor

И результат:

IBM       James,Dean,Sean
Microsoft   Bill,Steve
2 голосов
/ 28 сентября 2010

На всякий случай, если у любого из ваших контактов есть специальные символы XML в именах: подход Тони Роджерсона .

;with data as
(
SELECT 'IBM' Investor,  'James' Contact UNION ALL  
SELECT 'IBM' ,          'Dean'  Contact UNION ALL  
SELECT 'IBM' ,          'Sean'  Contact UNION ALL  
SELECT 'Microsoft' ,    'Bill'  Contact UNION ALL    
SELECT 'Microsoft',     'Steve' Contact
)
SELECT Investor, 
   stuff((SELECT mydata
   FROM (
      SELECT ',' + Contact  AS [data()]
      FROM
      data AS d2
      WHERE d2.Investor = d1.Investor
      FOR XML PATH(''), TYPE
   ) AS d ( mydata ) FOR XML RAW, TYPE ).value( '/row[1]/mydata[1]', 'varchar(max)' )
, 1, 1, '')
FROM data d1
GROUP BY Investor
2 голосов
/ 28 сентября 2010

Попробуйте метод ниже, чтобы получить список, разделенный запятыми.Мне нужно еще поиграть с этим, чтобы понять, как заставить работать группу.

DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + Contact
FROM InvestorContact
SELECT @listStr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...