Несколько строк в столбцы - PullRequest
1 голос
/ 13 марта 2012

У меня есть таблица с именем work_type, и данные выглядят так:

Desc               L_type      Ch_ID      Mod_Date
Std Process        11000       53901      2012-02-25 19:28:51.000
Not Req            16000       53901      2012-02-26 20:44:47.000
max sess           19000       53901      2012-02-25 19:44:05.000
max sess regist    19000       53901      2012-02-25 19:46:05.000

Когда L_type имеет несколько строк (для Ex 19000 в приведенных выше данных), тогда требуется самая последняя, ​​основанная на Mod_Date

Я хочу вывод как:

Te_pl      In_pl               Vn_pl         Ch_ID
Not Req    max sess regist     Std process   53901

Я написал такой запрос, но это не то, что я хочу:

Select Case when L_type = 11000 then Desc end as Vn_pl,
Case when L_type = 16000 then Desc end as Te_pl,
Case when L_type = 11000 then Desc end as In_pl,
Ch_ID
from dbo.Work_type

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Если вы когда-либо ожидаете, что вам понадобятся три столбца, то это должно сработать, если нет, то я бы предложил вместо этого посмотреть динамическое вращение:

;WITH data AS
(
SELECT 
[desc]
,l_type
,ch_id
,mod_date
,DENSE_RANK() OVER (PARTITION BY ch_id,l_type ORDER BY mod_date DESC) AS row
FROM dbo.Work_type
)
,data2 AS
(
SELECT * 
,row_number() OVER (PARTITION BY ch_id ORDER BY mod_date DESC) AS row1
from data
WHERE row = 1
)
SELECT 
MAX(Case when row1 = 1 THEN [desc] END) AS te_pl
,MAX(Case when row1 = 2 THEN [desc] END) AS in_pl
,MAX(Case when row1 = 3 THEN [desc] END) AS vn_pl
,CH_id
FROM data2
GROUP BY CH_ID
0 голосов
/ 13 марта 2012

Вы пытаетесь Pivot данных?

Проверьте ключевое слово PIVOT .

0 голосов
/ 13 марта 2012

Вот способ на основе XML транспонировать всю таблицу: здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...