2013-07-30 7 views
2

Есть ли способ изменить SQL-запрос, который обычно возвращает несколько строк с одинаковыми значениями в одну строку?SQL-запрос нескольких строк в одну строку

, например, если мой существующий запрос возвращает это:

ColA ColB 
1 AA 
1 BB 
1 CC 
2 AA 
3 AA 

я мог изменить запрос, чтобы иметь только 3 строки, возвращаемые и поставить 2-й и 3-й результат на 1 в первом ряду, так что вы 'd есть строка: 1 AA BB CC?

+0

Посмотрите на 'DISTINCT' или 'GROUP BY'. –

+0

Также смотрите 'union'. –

+0

Какую базу вы используете? – Taryn

ответ

1

Не очень хорошо, но работает (я пропускаю group_concat из MySql):

SELECT ColA, 
     ColB=STUFF(
      (SELECT ' ' + ColB 
       FROM dbo.Table1 t2 
       WHERE t1.ColA = t2.ColA 
       FOR XML PATH ('')) 
      , 1, 1, '') 
FROM dbo.Table1 t1 
GROUP BY ColA 

Demo

[Edit: для какой-либо причине предположительно SQL-сервера]

+0

Да, я использую MS SQL Server. Спасибо, завтра. Ограничивает ли это до 3 вхождений? Есть ли способ сгенерировать его в желаемом формате независимо от того, сколько случаев вы могли бы иметь? – kmfdm

+0

@kmfdm: размер, если группы не имеют значения. –

+0

Я предлагаю использовать функцию 'value', например this -' stuff ((выберите '' + ColB из dbo.Table1 как t2, где t2.ColA = t1.ColA для пути xml ('')). Value ('.' , 'nvarchar (max)'), 1, 1, '') ', иначе ваше решение не подходит для произвольных строк, например,« A & A ». Также см. Этот ответ http://stackoverflow.com/a/12940952/1744834, например. –

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