查找 SQL 表之间的差异
Posted
技术标签:
【中文标题】查找 SQL 表之间的差异【英文标题】:Find difference between SQL tables 【发布时间】:2021-04-19 13:29:11 【问题描述】:谁能帮我找出两个相似表之间的区别:
表 1:
表 2:
我需要绝对值的差异,如表 1 - table2 = 输出值
【问题讨论】:
预期结果是什么? 值需要显示为 table1.column1 - table2.column1 输出应该是值,就像我们在 excel 中使用两个字段一样 请使用相同的格式将预期结果添加到问题中。 请分享您的预期输出。 表格代表无序组的行。请指定您希望如何将第一个表中的行与第二个表中的行匹配。 【参考方案1】:如果你想在 table1 和 table2 之间有花费、sv 和 bfe 的差异来匹配渠道和漏斗,你可以使用内连接。
select t1.channel,t1.funnelfunnel,(t1.spend-t2.spend),(t1.sv-t2.sv)sv,(t1.bfe-t2.bfe)bfe
from table1 t1 inner join table2 t2
on t1.channel=t2.channel and t1.funnel=t2.funnel
如果您希望 table1 中的所有行在从 table2 中减去匹配值后具有值,则可以使用左连接。
select t1.channel,t1.funnelfunnel,(t1.spend-t2.spend),(t1.sv-t2.sv)sv,(t1.bfe-t2.bfe)bfe
from table1 t1 left join table2 t2
on t1.channel=t2.channel and t1.funnel=t2.funnel
【讨论】:
我认为这不是 OP 想要的,但我可能错了。 现在我也这么想。你很有可能是对的。 请告诉我。如果这不是您要查找的内容,请上传您想要的输出。【参考方案2】:要求是找到完全匹配(交叉应用或内部连接)并绝对值并找到值的差异
将@tmp1 声明为表( 频道 varchar(10), 漏斗 varchar(2), 花费数字(18,2), sv int, bfe int);
将@tmp2 声明为表( 频道 varchar(10), 漏斗 varchar(2), 花费数字(18,2), sv int, bfe int); 插入@tmp1(频道、漏斗、支出、sv、bfe) 值('显示','UF',155629,89554,1669), ('显示','MF',85454,31534,475), ('显示','LF',106983,68324,867)
插入@tmp2(渠道、漏斗、支出、sv、bfe) 值('显示','MF',206622.17,38018,21443), ('显示','UF',68219.46,89561,1669), ('显示','LF',2297171.85,514779,59347)
select
tmp1.funnel,
abs(tmp1.spend)-abs(tmp2.spend) spend,
abs(tmp1.sv)-abs(tmp2.sv) sv,
abs(tmp1.bfe)-abs(tmp2.bfe) bfe
from @tmp1 tmp1
join @tmp2 tmp2 on tmp1.funnel=tmp2.funnel
输出
UF 87409.54 -7 0
MF -121168.17 -6484 -20968
LF -2190188.85 -446455 -58480
【讨论】:
以上是关于查找 SQL 表之间的差异的主要内容,如果未能解决你的问题,请参考以下文章