首页 > 解决方案 > 如何根据两列的内容拆分一组数据的结果?

问题描述

我有以下返回的表:

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

谢谢你们!

标签: sqlsql-server

解决方案


你可以使用 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;

我推荐applyover,union all因为它只扫描表一次。这对小桌子来说没什么大不了的。但它在较大的表上或“表”确实是一个复杂的查询时会变得更加重要。


推荐阅读