2012-03-13 4 views
1

У меня есть таблица с именем work_type и данные выглядит следующим образом:Mutliple строки в столбцы

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 
+0

Возможный дубликат [Объединение нескольких результатов в подзапросе в одно значение, разделенное запятыми] (http://stackoverflow.com/questions/111341/combine-multiple-results-in-a-subquery-into-a- значение с одной запятой) – danihp

+0

@ danihp Я не думаю, что запрос состоит в объединении любых значений вместе. –

ответ

2

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

;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

Отлично Это то, что я хочу – peter

+0

приятно! вы можете помочь с этим http://stackoverflow.com/questions/9687622/sql-server-exporting-data-from-a-view –

0

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

0

Вы пытаетесь свернуть данные?

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