2015-05-11 4 views
0

У меня есть таблица с некоторыми данными, что-то вроде этого:Как получить данные в одной строке?

+---------+---------+---------+---------+-------------+ 
| Column1 | Column2 | Column3 | Column4 | Column5 | 
+---------+---------+---------+---------+-------------+ 
| 38073 |  16 | abc  |  444 | 4/28/2015 | 
| 38076 |  70 | gug  |  555 | 4/30/2015 | 
| 38098 |  13 | yyy  |  111 | 5/12/2015 | 
| 38098 |  13 | yyy  |  112 | 5/13/2015 | 
| 38098 |  13 | yyy  |  113 | 5/14/2015 | 
| 38098 |  13 | yyy  |  114 | 5/15/2015 | 
| 38100 |  17 | abc  |  115 | 5/13/2015 | 
+---------+---------+---------+---------+-------------+ 

То, что я хочу сделать, это иметь значения из столбцов 4 и 5 на одной строке, что-то вроде этого:

+---------+----------+-----------+----------+-----------+----------+-----------+----------+-------------+ 
| Col1 | Col4Val1 | Col5Val1 | Col4Val2 | Col5Val2 | Col4Val3 | Col5Val3 | Col4Val4 | Col5Val4 | 
+---------+----------+-----------+----------+-----------+----------+-----------+----------+-------------+ 
| 38073 |  444 | 4/28/2015 | null  | null  | null  | null  | null  | null  | 
| 38076 |  555 | 4/30/2015 | null  | null  | null  | null  | null  | null  | 
| 38098 |  111 | 5/12/2015 | 112  | 5/13/2015 | 113  | 5/14/2015 | 114  | 5/15/2015 | 
+---------+----------+-----------+----------+-----------+----------+-----------+----------+-------------+ 

Цените помощь, если это возможно.

спасибо.

Богдан

ответ

0

Вы можете использовать UNION для UNPIVOT данных с CTE, затем PIVOT столбцов. Вы можете достичь этого динамически тоже есть сотни статей, которые будут показывать вам, как сделать это:

;WITH CTE AS (
SELECT [Column1], CAST([Column4] AS VARCHAR) AS [ColumnVals], 'Col4Val'+CAST(ROW_NUMBER() OVER(PARTITION BY [Column1] ORDER BY (SELECT 1)) AS VARCHAR) AS [Pivot] 
FROM Table1 
UNION 
SELECT [Column1], [Column5], 'Col5Val'+CAST(ROW_NUMBER() OVER(PARTITION BY [Column1] ORDER BY (SELECT 1)) AS VARCHAR) AS [Pivot] 
FROM Table1) 
SELECT [Column1], [Col4Val1], [Col5Val1], [Col4Val2], [Col5Val2], [Col4Val3], [Col5Val3], [Col4Val4], [Col5Val4] 
FROM CTE 
PIVOT (MAX([ColumnVals]) FOR [Pivot] IN ([Col4Val1], [Col5Val1], [Col4Val2], [Col5Val2], [Col4Val3], [Col5Val3], [Col4Val4], [Col5Val4])) PIV 

Вот рабочая скрипку: http://sqlfiddle.com/#!6/e992f/1

+0

Спасибо, это здорово. – Bogdan

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