首页 > 解决方案 > 如何比较两个表的两列数据并在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在这两个表中是通用的。

我正在努力实现:

下面是预期的结果

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   

对此有任何提示/想法吗?

谢谢!

标签: sqlsql-servertsql

解决方案


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。我认为比在一列中混合数字和文本(两种数据类型)要好。


推荐阅读