sql - 如何根据两列的内容拆分一组数据的结果?
问题描述
我有以下返回的表:
value_date end_date local_limit_amount
12/10/2020 04/27/2021 800000.000000
12/10/2020 07/22/2021 1000000.000000
12/18/2020 12/31/2020 1425000.000000
01/18/2021 12/31/2021 500000.000000
我想将这些数据切片如下所有日期应独立显示两次作为一个日期,起息日线应使限制金额为正,结束日期线应使相同金额为负
general_date local_limit_amount
12/10/2020 800000.000000
12/10/2020 1000000.000000
12/18/2020 1425000.000000
01/18/2021 500000.000000
04/27/2021 -800000.000000
07/22/2021 -1000000.000000
12/31/2020 -1425000.000000
12/31/2021 -500000.000000
谢谢你们!
解决方案
你可以使用 unpivot apply
:
select v.*
from t cross apply
(values (value_date, local_limit_amount),
(end_date, -local_limit_amount)
) v(general_date, local_limit_amount)
order by general_date;
我推荐apply
over,union all
因为它只扫描表一次。这对小桌子来说没什么大不了的。但它在较大的表上或“表”确实是一个复杂的查询时会变得更加重要。
推荐阅读
- amazon-web-services - 如何自动化我的无服务器 Web 应用程序的端到端测试?
- excel - 如何在excel列中添加逗号分隔的数字?
- xamarin - 从注册的 URI 方案打开 Xamarin IOS 应用程序
- xcode - Xcode 构建 OpenGL 错误链接命令失败,退出代码为 1
- npm - SyntaxError:npm run 命令中 JSON 输入的意外结束
- javascript - Javascript textarea appendchild 不起作用
- spring-boot - 为什么当我使用部署的war文件单击提交时显示Http状态码404
- java - 计算填充的 EditText 字段
- bash - 提取每行括号之间的字符串
- php - 删除表而不进行回滚-Laravel