sql-server - SQL Server 2012 - 我尝试使用 2 列数据透视,但 SUM 函数没有给出预期结果
问题描述
我搜索了类似的问题,但最相似的是这个(使用 PIVOT 时在 SQL Server 2012 中未获得正确的 SUM 值),但条件略有不同,所以我将提出新问题
我想对 2 列进行透视查询,一列是货币类型,另一列是日期。这是示例数据:
| idTransaction | txtCashOutput | cashOutput | txtDateOutput | dateOutput |
| ------------- | ------------- | ---------- | ------------- | ---------- |
| 101 | cash_1 | 2000 | date_1 | 2020-01-01 |
| 101 | cash_1 | 2000 | date_1 | 2020-02-01 |
| 101 | cash_2 | 1000 | date_2 | 2020-03-01 |
| 101 | cash_2 | 1200 | date_2 | 2020-04-01 |
| 101 | cash_3 | 1500 | date_3 | 2020-05-01 |
我故意使用这些“txt”表来帮助我设置 2 列数据透视表。我忘记了如何使用动态多个枢轴。
这是我的查询:
select
idTransaction,
cash_1 = sum(cash_1), date_1 = max(date_1),
cash_2 = sum(cash_2), date_2 = max(date_2),
cash_3 = sum(cash_3), date_3 = max(date_3)
from (
select
idTransaction,
txtCashOutput,
cashOutput,
txtDateOutput,
dateOutput
from Table01
) src
pivot (
sum(cashOutput) FOR txtCashOutput IN (cash_1,cash_2,cash_3)
) AS piv1
pivot (
max(dateOutput) FOR txtDateOutput IN (date_1,date_2,date_3)
) as piv2
group by
idTransaction
预期结果:
| idTransaction | cash_1 | date_1 | cash_2 | date_2 | cash_3 | date_3 |
| ------------- | ------ | ---------- | ------ | ---------- | ------ | ---------- |
| 101 | 4000 | 2020-02-01 | 2200 | 2020-04-01 | 1500 | 2020-05-01 |
但我得到了这个:
| idTransaction | cash_1 | date_1 | cash_2 | date_2 | cash_3 | date_3 |
| ------------- | ------ | ---------- | ------ | ---------- | ------ | ---------- |
| 101 | 2000 | 2020-02-01 | 2200 | 2020-04-01 | 1500 | 2020-05-01 |
cash_1 的 SUM 结果不是加法,而是它的不同值,而 cash_2 的 SUM 结果是正确的。我有点困惑为什么如果值不同,SUM 结果是正确的,但如果值相同,SUM 结果不正确。
我上面提到的问题是他们需要显示一列的 SUM 结果,同时制作另一列的枢轴,所以我想这与我的有点不同。
我希望这已经足够清楚了。
任何帮助将不胜感激。
谢谢!
解决方案
CASE
使用带有表达式的条件聚合更容易做到这一点
SELECT idTransaction,
MAX (CASE WHEN txtCashOutput = 'cash_1' THEN cashOutput END ) AS cash_1,
MAX (CASE WHEN txtDateOutput = 'date_1' THEN dateOutput END ) AS date_1
MAX (CASE WHEN txtCashOutput = 'cash_2' THEN cashOutput END ) AS cash_2,
MAX (CASE WHEN txtDateOutput = 'date_2' THEN dateOutput END ) AS date_2,
. . .
FROM Table01
GROUP BY idTransaction
推荐阅读
- java - 错误未从被调用服务传播到调用者服务
- javascript - 我如何编辑 Li 项目以使用 javascript 向其中添加文本
- optimization - 是否可以在 Google Apps 脚本中批量处理范围保护?
- java - 如何使用 Reactive Kafka 将字符串数据发送到 kafka 生产者?
- interrupt - STM8S UART TX 中断启用/禁用问题
- css - 无法在 kendo-treeview 中为 kendo-checkbox 应用 css 样式
- javascript - 为什么 function(){}.__proto__ === Function.prototype 和 Function.prototype === function(){}.__proto_ 返回不同的结果
- c++ - 如何在 C++ 中保留颜色深度的同时提取文件图标并另存为 .ico?
- r - 希望在 write.csv() 中插入日期列
- java - 类型参数 t 具有不兼容的上限视图和 webview