SQL Pivot不工作
我正在用SQL做一个pivot,但它不起作用,有人能帮我解决问题吗,下面是我的结果集、所需的输出和我的查询 -->>使用下面的查询创建#Final temp表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
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