2013-05-25 3 views
-2

Я искал способ показать одну строку в нескольких колонках, одну ячейку. Содержание этого раздела разделено запятой.преобразовать строки в столбцы в sql server 2005

Например, вместо:

ProjectID  Label 
————   ——– 
1200   label1 
1200   label2 
1200   label3 

Я хотел бы результат моего запроса, чтобы выглядеть следующим образом:

ProjectID      1  2  3 
————     ——– 
1200       label1 label2, label3 

заранее спасибо

+0

должен создать разделенные столбцы не в запятых – user960439

+0

Есть много статей по этому поводу, как; [Статья 1] (https://www.simple-talk.com/sql/t-sql-programming/switching-rows-and-columns-in-sql/), [Статья 2] (http: //stackoverflow.com/questions/2482398/sql-rows-to-columns-conversion), [Результат поиска Google] (http://www.google.com.tr/#output=search&sclient=psy-ab&q= SQL + + строк до + столбцов & OQ = SQL + строк + & gs_l = hp.3.0.0j0i30l3.885.6537.0.8099.19.15.2.2.2.0.232.2248.0j14j1.15.0 ... 0,0 ... 1c.1.14.psy-AB. Yizvx9UVIWM & = 1 PBX & БАВ = on.2, or.r_qf. & BVM = bv.47008514, d.ZWU & Fp = daea5479fc9f2712 & BIW = 1920 & БиГ = 994) –

ответ

0

Это немного больше чем просто использование pivot, но только немного. Проблема в том, что у вас нет столбца для указания , где ярлыки идут, поэтому вам нужно добавить его.

Вот решение с использованием агрегация:

with t as (
     select t.*, row_number() over (partition by ProjectId order by label) as seqnum 
     from t 
) 
select ProjectId, 
     max(case when seqnum = 1 then label end) as [1], 
     max(case when seqnum = 2 then label end) as [2], 
     max(case when seqnum = 3 then label end) as [3] 
from t 
group by ProjectId; 

Вот решение с помощью шарнир:

with t as (
     select t.*, row_number() over (partition by ProjectId order by label) as seqnum 
     from t 
) 
select ProjectId, [1], [2], [3] 
from t 
pivot (max(label) for seqnum in ([1], [2], [3]) 
    ) as pvt 
Смежные вопросы