SQLServer2008透视表
我有下表SQLServer2008透视表,sql,sql-server,sql-server-2008,pivot,Sql,Sql Server,Sql Server 2008,Pivot,我有下表 GROUP Number Sum SOURCE a 1 -2503 WTH a 2 -180 DET a 3 -156 PLY a 4 -99 DET a 5 -252 DET 我想介绍如下 GROUP Number Sum DET PLY WTH a 1 -2503
GROUP Number Sum SOURCE
a 1 -2503 WTH
a 2 -180 DET
a 3 -156 PLY
a 4 -99 DET
a 5 -252 DET
我想介绍如下
GROUP Number Sum DET PLY WTH
a 1 -2503 -2503
a 2 -180 -180
a 3 -156 -156
a 4 -99 -99
a 5 -252 -252
以下是我使用PIVOT尝试的(未成功的)内容
SELECT
[GROUP]
,Number
,Opening_Val
,[Sum]
,DET
,PLY
,WTH
FROM
(SELECT
IA.GROUP_CD
,IA.Number
,IA.[sum]
,Src
FROM dbo.##Inter_App IA
GROUP BY IA.[GROUP]
,IA.Number
,IA.[sum]
,Src ) query
PIVOT
( Sum(IA.[Sum])
For Src in (DET, PLY, WTH)
) pvt
理想情况下,我不想将列限制为(DET、PLY、WTH),因为可能有更多我不知道的源
谢谢你的帮助
谢谢,詹姆斯,你的尝试太复杂了:)。 此外,请为列选择其他名称,而不是sum、group和number,因为这些名称不仅是sql语法关键字,还使查询更难阅读(例如sum([sum])、group by[group])
您现有的查询有一些问题 首先,我不知道为什么在子查询中对所有列都使用GROUPBY。这是没有必要的,除非你知道你有重复,你不希望在最终结果 其次,您试图在最终选择列表中显示
[sum]
列,但您也在数据透视中聚合此数据--sum(IA.[sum])
--除非子查询将此列列出两次,否则无法聚合数据并显示此值
第三,PIVOT中使用的聚合引用的是IA
表别名-此别名在子查询之外不可用,因此语法也不起作用
我将更改您的查询以使用以下内容:
select [group], [number], [sum], DET, PLY, WTH
from
(
select [group], [number],
[sum],
[sum] pivsum, SOURCE
from dbo.Inter_App
) d
pivot
(
sum(pivsum)
for SOURCE in (DET, PLY, WTH)
) piv;
看。您会注意到,子查询有两列带有[sum]
-其中一列是我提供的别名pivsum
-这将用于数据透视中的聚合,另一列将用于最终选择列表
最后,您声明可能有未知数量的源值,如果是这种情况,则需要使用动态SQL生成结果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(SOURCE)
from Inter_App
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT [group], [number],
[sum], ' + @cols + '
from
(
select [group], [number],
[sum],
[sum] pivsum, SOURCE
from dbo.Inter_App
) x
pivot
(
sum(pivsum)
for SOURCE in (' + @cols + ')
) p '
execute sp_executesql @query;
看。两个版本都给出了一个结果:
| GROUP | NUMBER | SUM | DET | PLY | WTH |
|-------|--------|-------|--------|--------|--------|
| a | 1 | -2503 | (null) | (null) | -2503 |
| a | 2 | -180 | -180 | (null) | (null) |
| a | 3 | -156 | (null) | -156 | (null) |
| a | 4 | -99 | -99 | (null) | (null) |
| a | 5 | -252 | -252 | (null) | (null) |
谢谢你非常清楚的回答。不幸的是,我没有足够的代表+1你。詹姆斯,有时我有两行的数字相同,但一行的SOURCE=DET,另一行的SOURCE=PLY。我的建议是,如果你有一个新问题,那么就创建一个新问题,其中包含解决问题的所有要求。
| GROUP | NUMBER | SUM | DET | PLY | WTH |
|-------|--------|-------|--------|--------|--------|
| a | 1 | -2503 | (null) | (null) | -2503 |
| a | 2 | -180 | -180 | (null) | (null) |
| a | 3 | -156 | (null) | -156 | (null) |
| a | 4 | -99 | -99 | (null) | (null) |
| a | 5 | -252 | -252 | (null) | (null) |