Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Pivot不工作_Sql_Sql Server_Sql Server 2012_Pivot Table - Fatal编程技术网

SQL Pivot不工作

SQL Pivot不工作,sql,sql-server,sql-server-2012,pivot-table,Sql,Sql Server,Sql Server 2012,Pivot Table,我正在用SQL做一个pivot,但它不起作用,有人能帮我解决问题吗,下面是我的结果集、所需的输出和我的查询 -->>使用下面的查询创建#Final temp表 CREATE TABLE #Final ( Name VARCHAR(100), Code VARCHAR(20), Amount MONEY ) -->> Insert data, here i insert all data that i needed INSER

我正在用SQL做一个pivot,但它不起作用,有人能帮我解决问题吗,下面是我的结果集、所需的输出和我的查询

-->>使用下面的查询创建#Final temp表

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
金额的结果全部为空

            11111   22222   33333
Batman      NULL    NULL    NULL
Robin       NULL    NULL    NULL
Superman    NULL    NULL    NULL
Wolverine   NULL    NULL    NULL
-----------------------------------------------------------------
预期结果应为:(每个名称每个代码的金额之和)


任何帮助都将不胜感激。提前感谢

您的列名应该是:

[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

使用
[11111]、[22222]、[33333]
而不是
[1]、[2]、[3]

当然,他可以将
ISNULL
放在外部
选择
@FelixPamittan哇太棒了,现在我明白怎么回事了。。这是我第一次在SQL中创建pivot:),我学习了如何创建。。。我没有注意到那件事。。这太完美了,请将此标记为答案。@Japongskie,这就是我喜欢条件聚合方法的原因,@FelixPamitstan,ahm,你能告诉我如何使用条件聚合实现这一点吗,当我在谷歌搜索时。。我看到的第一件事是那个支点。。如何在条件聚合中做到这一点?基于Jeff Moden的研究,条件聚合或交叉表具有优势。
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