sql - 如何比较两个表的两列数据并在SQL中保存其百分比差异
问题描述
我有两张桌子
表格1
ID SID Date value
1 1 2017-12-31 22.36
1 1 2018-03-31 20.0
1 1 2018-06-30 10.87
1 1 2018-09-30 67.98
1 2 2017-12-31 55.987
1 2 2018-03-31 60.12
1 2 2018-06-30 62.0
1 2 2018-09-30 15.543
1 3 2017-12-31 85.987
1 3 2018-03-31 40.12
1 3 2018-06-30 12.0
1 3 2018-09-30 15.543
表2
ID SID Date value
2 1 2017-12-31 22.36
2 1 2018-03-31 10.0
2 1 2018-06-30 10.87
2 1 2018-09-30 67.98
2 2 2017-12-31 55.987
2 2 2018-03-31 60.12
2 2 2018-06-30 31.0
2 2 2018-09-30 15.543
2 3 2017-12-31 85.987
2 3 2018-03-31 40.12
2 3 2018-06-30 06.0
表 1 是基表。
表1和表2包含季度数据,SID在这两个表中是通用的。
我正在努力实现:
- 要找出表 1 和表 2 的各个 SID 的值列中减少/增加的百分比。如果表 1 和表 2 的 SID 缺失,则显示一条消息。
下面是预期的结果
ID SID Date value percent increase/decrease
1 1 2017-12-31 22.36 0
1 1 2018-03-31 20.018 50
1 1 2018-06-30 10.87 0
1 1 2018-09-30 67.98 0
1 2 2017-12-31 55.987 0
1 2 2018-03-31 60.12 0
1 2 2018-06-30 31.0 50
1 2 2018-09-30 15.543 0
1 3 2017-12-31 85.987 0
1 3 2018-03-31 40.12 0
1 3 2018-06-30 12.0 50
1 3 2018-09-30 15.543 data not available to compare in table 2
这是可以实现的吗?我正在尝试编写一个查询来通过 JOIN 来实现这一点,但离它还很远。下面是示例查询。
SELECT t1.ID,t1.SID,t1.Date,t1.value,
CASE WHEN (t1.Value -t2.Value/t1.value)*100=50 THEN '50' END AS 'percent increase/decrease'
FROM table t1 INNER JOIN table t2
ON t1.SID=t2.SID
对此有任何提示/想法吗?
谢谢!
解决方案
select t1.*,
case when t2.[Value] is null then null else (t1.[value] - t2.[value])/t1.[value] end
from table1 t1
left join table2 t2 on t1.SID = t2.SID and t1.[Date] = t2.[Date]
null
当 中没有对应的值时它会给出Table2
。我认为比在一列中混合数字和文本(两种数据类型)要好。
推荐阅读
- json - 从 unix 脚本中给定的文件名列表创建一个 json
- javascript - TypeError:“属性”是只读的
- java - 在Java中计算双位小数点后的位数的程序
- php - LDAP 用户身份验证适用于 CN,但不适用于 sAMAccountName
- c# - 使用 openxml 合并演示文稿文件时显示空白的图像
- sql - 在 SQL 中加入 2 个没有公共列字段的查询?
- flutter - Flutter Flame 游戏 - 动画速度(更新持续时间)
- python - 如何在开发中正确创建 Python 功能分支版本?(点子和 PEP-440)
- excel - 用于附加记录的 SharePoint/Excel 脚本
- javascript - 如何将“用户”对象从我的 TopBar.js 导出到 App.js?