Объединение / объединение значений из нескольких строк в одну строку - PullRequest
0 голосов
/ 26 февраля 2012

Вот пример таблицы для моей проблемы:

100     IDO     0514443421
100     IDO     0504899721
100     IDO     0508843421
101     LIRAN   0523399721
101     LIRAN   0524899721
102     ERAN    0593369721
102     ERAN    0599999721

Я хочу получить такую ​​строку:

100, IDO, 0514443421, 0504899721, 0508843421

Мне известно о проблемном фактеизменение количества строк.Я могу согласиться на фиксированные 3 выходных столбца, некоторые из них могут быть пустыми.

Есть ли какой-нибудь хороший способ для достижения этого?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 26 февраля 2012

Предполагая недавний SQL Server и основываясь на превосходном предложении здесь , он выберет первые два столбца отдельно, а последнюю часть в виде строки, разделенной запятыми;

SELECT id, ColA, 
  REPLACE(
    (SELECT ColB AS [data()] 
     FROM TableA a2 
     WHERE a1.id=a2.id 
     ORDER BY a2.ColB FOR XML PATH('')),
     ' ', ', ')
FROM TableA a1
GROUP BY id, ColA;

Демо здесь .

Редактировать: Конечно, вы можете получить все это как одну строку, если хотите, просто замените первую строку на

SELECT CAST(id AS VARCHAR(16)) + ', ' + ColA + ', ' + 
0 голосов
/ 26 февраля 2012

Попробуйте:

;with cte as 
(select id,
        colA,
        colB,
        rownumber() over (partition by id, colA order by colB) rn
 from myTable)
select id, colA, t1.colB colB1, t2.colB colB2, t3.colB colB3
from cte t1
left join cte t2 on t1.id = t2.id and t1.colA = t2.colA and t2.rn = 2
left join cte t3 on t1.id = t3.id and t1.colA = t3.colA and t3.rn = 3
where t1.rn = 1
...