Sql 在具有多个和的多个列上旋转
我有以下样本数据: +------+----+----+-----+-----+ |类型| Total1 | Total2 | Account1 | Account2| +------+----+----+-----+-----+ |调整|-2.14 | 2.14 | 1220 | 4110| |调整| 0.21 |-0.21 | 1220 | 4110| |调整|-6.43 | 6.43 | 1220 | 1220| +------+----+----+-----+-----+ 我要做的是透视/求和,Account1列与Total1列相关,Account2表与Total2列相关 但在进行数据透视时,我需要按Account1和Account2的组合进行数据透视,并按该科目代码的相关合计列求和,因此使用此示例数据,我得到以下结果: +------+----+---+ |类型| 1220 | 4110| +------+----+---+ |调整|-1.93 | 1.93| +------+----+---+ 到目前为止,我的两次尝试都包含了这一点,但并不完全如此。有人能告诉我我遗漏了什么吗 选择 类型 总和[1220]为[1220], 总和[4110]为[4110] 临时工 支点 sumTotal1 对于[1220],[4110]中的Account1 P 按类型分组 选择 类型 当Account1='1220'时为sumcase,当Account2='1220'时为Total1,则Total2结束为[1220], 当Account1='4110'时为sumcase,当Account2='4110'时为Total1,则Total2以[4110]结尾 临时工 按类型分组 样本数据: 创建临时表 varchar50型, 总共1美元, 总共2块钱, 会计1国际, 会计2国际 插入临时类型、Total1、Total2、Account1、Account2 选择“调整”、“2.14”、“2.14”、“1220”、“4110” 联合所有 选择“调整”、“0.21”、“-0.21”、“1220”、“4110” 联合所有 选择“调整”、“6.43”、“6.43”、“1220”、“1220”Sql 在具有多个和的多个列上旋转,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下样本数据: +------+----+----+-----+-----+ |类型| Total1 | Total2 | Account1 | Account2| +------+----+----+-----+-----+ |调整|-2.14 | 2.14 | 1220 | 4110| |调整| 0.21 |-0.21 | 1220 | 4110| |调整|-6.43 | 6.43 | 1220 | 1220| +------+----+----+-----+-----+ 我要做的是透视
我们可以尝试采用联合方法来处理这一问题:
WITH cte AS (
SELECT [Type], Total1 AS Total, Account1 AS Account FROM #temp
UNION ALL
SELECT [Type], Total2, Account2 FROM #Temp
)
SELECT
[Type],
SUM(CASE WHEN Account = '1220' THEN Total ELSE 0 END) AS [1220],
SUM(CASE WHEN Account = '4110' THEN Total ELSE 0 END) AS [4110]
FROM cte
GROUP BY
Type;
这里的基本策略是将所有账目和总额分为两列,然后在这些单独的列上进行聚合/透视。这就解决了在多个列之间聚合数据的问题。最好的长期解决方案可能是更改数据结构,使帐户和合计只包含一列。另一个选项是使用交叉应用程序取消对数据的分割,然后进行数据透视 范例 返回
Select *
From (
Select A.[Type]
,B.*
from #Temp A
Cross Apply ( values (Total1,Account1)
,(Total2,Account2)
) B (Value,Item)
) Src
Pivot (sum(Value) for Item in ([1220],[4110]) ) pvt
Type 1220 4110
Adjustment -1.93 1.93