2015-12-17 2 views
-1

Я делаю стержень в SQL, но он не работает, может кто-то помочь, что не так? , ниже - мой результирующий набор, желаемый результат и мой запрос.SQL Pivot не работает

- >> #Final temp table создается с использованием нижеследующего запроса.

CREATE TABLE #Final 
    (
     Name VARCHAR(100), 
     Code VARCHAR(20), 
     Amount MONEY 
    ) 

-->> Insert data, here i insert all data that i needed 
INSERT INTO [#Final] 
(
    [Name], 
    [Code], 
    [Amount] 
) 
SELECT something... 
----------------------------------------------------------------- 

Вот результирующий набор

Name  Code **Amount** 
Batman  11111 4472.23 
Batman  11111 -1788.89 
Batman  22222 5166.98 
Batman  22222 -5166.98 
Batman  22222 5166.98 
Batman  33333 6880.43 
Batman  33333 -2293.47 
Robin  11111 8278.54 
Robin  11111 41392.66 
Robin  22222 15940.95 
Robin  22222 79704.71 
Robin  33333 16557.23 
Robin  33333 106136.1 
Robin  33333 4669.99 
Superman 11111 8944.39 
Wolverine 11111 32782.99 
Wolverine 11111 32782.99 
Wolverine 11111 49671.2 
Wolverine 11111 16557.06 
Wolverine 22222 127527.54 
Wolverine 33333 105074.74 
Wolverine 33333 -420.3 
----------------------------------------------------------------- 

-->> My pivot query 
SELECT [pvt].[Name], [1],[2],[3] 
FROM 
(
    SELECT Name, Code, Amount FROM #Final 
) src 
PIVOT 
(
    SUM(Amount) FOR Code IN ([1],[2],[3]) 
) pvt 

В результате суммы все NULL

  11111 22222 33333 
Batman  NULL NULL NULL 
Robin  NULL NULL NULL 
Superman NULL NULL NULL 
Wolverine NULL NULL NULL 
----------------------------------------------------------------- 

Ожидаемый результат должен быть: (Сумма суммы на код по имени)

  11111  22222  33333 
Batman  2683.34  5166.98  4586.96 
Robin  49671.2  95645.66 127363.32 
Superman 8944.39   0   0 
Wolverine 131794.24 127527.54 104654.44 

Любая помощь wou Мы очень ценим. Заранее спасибо

ответ

3

Ваши имена столбцов должны быть:

[11111],[22222],[33333] 

Вместо:

[1],[2],[3] 

Вот ваш окончательный запрос:

SELECT [pvt].[Name], [11111],[22222],[33333] 
FROM 
(
    SELECT Name, Code, Amount FROM #Final 
) src 
PIVOT 
(
    SUM(Amount) FOR Code IN ([11111],[22222],[33333]) 
) pvt 

Другой способ, чтобы получить желаемый результат заключается в использовании условной агрегации:

SELECT 
    Name, 
    [11111] = SUM(CASE WHEN Code = 11111 THEN Amount Else 0 END), 
    [22222] = SUM(CASE WHEN Code = 22222 THEN Amount Else 0 END), 
    [33333] = SUM(CASE WHEN Code = 33333 THEN Amount Else 0 END) 
FROM #Final 
GROUP BY Name 
+1

'isnull' для показа' 0' суммы? –

+2

Уверен, он может поставить 'ISNULL' на внешний' SELECT'. –

+0

@FelixPamittan Wow great! , теперь я вижу, что не так .. это мой первый раз, чтобы создать опорную точку в SQL :), я изучил, как создать ... я не заметил, что это ... это прекрасно! , отметьте это как ответ. – Japongskie

1

использование [11111],[22222],[33333] вместо [1],[2],[3]