SQL Pivot不工作

时间:2015-12-17 03:13:25

标签: sql sql-server sql-server-2012 pivot-table

我在SQL中做了一个支点,但是它没有用,有人可以帮助解决问题吗? ,下面是我的结果集,所需的输出和我的查询。

- >>使用以下查询创建#Final临时表。

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

非常感谢任何帮助。提前致谢

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用[11111],[22222],[33333]代替[1],[2],[3]