计算SQL Server中两个相似表列之间的比率
我有这张桌子计算SQL Server中两个相似表列之间的比率,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有这张桌子 Code1 Month1 Month2 Month3 -------------------------------- Delta 2000 3000 1000 Charlie 1000 1000 2000 Bravo 800 200 300 我有另一个类似的temp表,其中包含来自不同计算方面的数据 Code1 Month1 Month2 Month3 ---------------
Code1 Month1 Month2 Month3
--------------------------------
Delta 2000 3000 1000
Charlie 1000 1000 2000
Bravo 800 200 300
我有另一个类似的temp表,其中包含来自不同计算方面的数据
Code1 Month1 Month2 Month3
--------------------------------
Delta 1000 3000 3000
Charlie 300 400 200
Bravo 400 200 300
我想知道如何将两个表中的数据合并到一个表中,格式如下
Code1 Month1 Month2 Month3
---------------------------------
Delta 2 ........
Charlie 3.3 ...
Bravo 2 ....
这基本上是匹配行,然后执行第一个表列/第二个表列
我有一个粗略的方法,就是使用将表连接到一个大表中,然后通过分割连接的列来创建另一个临时表,但我想知道是否有更好的方法
谢谢您可以使用内部连接
select
t1.Code1,
(t1.month1 * 1.0) / t2.month1 as month1,
(t1.month2 * 1.0) / t2.month2 as month2,
(t1.month3 * 1.0) / t2.month3 as month3
from t1
inner join t2 on t1.code1 = t2.code1
请注意:
从提供的示例数据来看,似乎不需要完全外部连接。如果数据是1:1,出于性能考虑,最好使用内部联接
如果您有所有匹配的行,那么
内部联接就可以了。如果您关心非匹配项,我不会真正推荐完全外部连接。相反,union all
提供了一种方法:
select code1,
sum(month1) / nullif(sum(month1_2), 0) as ratio_1,
sum(month2) / nullif(sum(month2_2), 0) as ratio_1,
sum(month3) / nullif(sum(month3_2), 0) as ratio_1,
from ((select t1.code1, month1, month2, month3
from t1
) union all
(select t2.code1, null, null, null, t2.month1 as month1_2, t2.month2 as month2_2, t2.month3 as month3_2
from t2
)
) t
group by code1;
UNION合并行,所以这就是您需要将一个表固定在另一个表上,但将堆栈、列和下一个列连接在一起的地方
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
您是只想选择这样的数据,还是想要一个这样的全新表?一个视图?假设Code1
在每个表中都是唯一的,JOIN
似乎是正确的方法。我只想选择数据并从存储的进程返回数据。看起来这个线程涵盖了我从示例数据中想要的内容,似乎不需要完全的外部连接(这样复杂)。如果数据是1对1,那么最好使用内部联接来考虑性能。我还建议您查找ISNULL()
和ISNULL
之间的差异,第二个将更适合您的查询。/ISNULL(T1.Month1,0)
等——这可能会导致被零除。
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2