我在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
非常感谢任何帮助。提前致谢
答案 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]