Поворот данных
Поворот - это метод, который группирует и объединяет данные, переводя их из состояния строк в состояние столбцов.Во всех сводных запросах необходимо указать три элемента:
- Что вы хотите видеть в строках?Этот элемент известен как включенные строки или группирующий элемент
- Что вы хотите видеть в столбцах?Этот элемент известен как столбцы на столбцах или распространяющийся элемент .
- Что вы хотите видеть на пересечении каждой отдельной строки и значения столбца?Этот элемент известен как данные или элемент агрегации .
pattern:
WITH PivotData AS
(
SELECT
< grouping column >,
< spreading column >,
< aggregation column >
FROM < source table >
)
SELECT < select list >
FROM PivotData
PIVOT( < aggregate function >(< aggregation column >)
FOR < spreading column > IN (< distinct spreading values >) ) AS P;
У меня есть эта таблица, созданная в SQL Server
CREATE TABLE [dbo].[NameValueData](
[Name] [VARCHAR](50) NOT NULL,
[Value] [INT] NOT NULL
) ON [PRIMARY]
и имеет значения
INSERT INTO NameValueData
VALUES
( 'N1', 1 ),
( 'N2', 2 ),
( 'N3', 3 ),
( 'N4', 4 ),
--NOT FIXED Number of ROWS
И данные:
Name Value
N1 1
N2 2
N3 3
N4 4
... ...
Теперь мне нужно повернуть этих данных и получить результаты там, где имена столбцовсоздан на основе значений строки из имени столбца
N1 N2 N3 N4 ...
1 2 3 4 --Can be more
Я пытался написать свой собственный сводный SQL
WITH PivotData
AS (SELECT Value AS GroupingColumn,
Name AS SpreadingColumn,
Value AS AggregationColumn
FROM dbo.NameValueData)
SELECT 1 AS Ignore,
[N1],
[N2],
[N3],
[N4]
FROM PivotData
PIVOT
(
MAX(AggregationColumn)
FOR SpreadingColumn IN ([N1], [N2], [N3], [N4])
) AS P;
Результат:
Ignore N1 N2 N3 N4
1 1 NULL NULL NULL
1 NULL 2 NULL NULL
1 NULL NULL 3 NULL
1 NULL NULL NULL 4
Почему я получаю 4строк здесь?