2012-05-07 3 views
3

У меня есть таблица со следующими данными:SQL SELECT - группировать несколько значений на одной строке

ID CAT TYPE SUBPRODUCT 
--- ---- ------ ---------------- 
1 1  1  AA 
2 1  1  BB 
3 1  2  CC 

я хотел бы получить данные, как это:

CAT TYPE SUBPRODUCT 
----- ------ --------------- 
1  1  AA,BB 
1  2  CC 

пожалуйста ответить мне что мне делать.

Спасибо.

+0

так как кажется, что вы получили помощь вам нужно, вы не могли бы принять ответ. :) –

ответ

7

Вы можете использовать FOR XML PATH. В то время как немного трудно читать, afaik в настоящее время является самым кратким способом конкатенации строк.

Разбивка

  • FOR XML PATH Соединяет все значения, которые соответствуют подвыбор
  • STUFF удаляет ведущую запятая

SQL Заявление

SELECT q.CAT 
     , q.TYPE 
     , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '') 
FROM q 
GROUP BY 
     q.CAT 
     , q.TYPE 

тестовый скрипт

;WITH q AS (
    SELECT * FROM (VALUES 
    (1, 1, 1, 'AA') 
    , (2, 1, 1, 'BB') 
    , (3, 1, 2, 'CC') 
) AS a (ID, CAT, TYPE, SUBPRODUCT)  
) 
SELECT q.CAT 
     , q.TYPE 
     , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '') 
FROM q 
GROUP BY 
     q.CAT 
     , q.TYPE 
+0

Его работа fri. Я очень благодарен за ваш ответ. :) –

Смежные вопросы