根据SQL Server中的其他列计算列值的乘积

时间:2017-07-14 13:40:58

标签: sql sql-server join

我有一张桌子

Tid   Did    value
------------------
1     123    100
1     234    200
2     123    323
2     234    233

所有tid都有did为123和234.所以对于每个有did 123和234的tid,我想要相应值的乘积

输出表将是

Tid   Product
------------------
1     20000 (product of 100 and 200)
2     75259 (product of 323 and 233)

任何帮助?

3 个答案:

答案 0 :(得分:0)

select tid,
         min(case when did = 123 then value end)
       * min(case when did = 234 then value end) product
  from my_table
 group by tid

要合并多个行的数据(基于tid),请使用GROUP BY

由于您按tid进行分组,因此您必须使用聚合函数对各行中的其他值执行任何操作。如果隐含的假设成立(每个did每个tid恰好匹配1行)那么你使用的聚合函数并不重要; min和任何事情一样好。

在聚合中,您使用CASE逻辑为所需的value选择didNULL组中的所有其他行tid

然后就算数学。

答案 1 :(得分:0)

您可以使用一些算术来获得每个产品。

select tid,exp(sum(log(value))) as prod
from t
group by tid

要仅对已完成值123和234的tid执行此操作,请使用

select tid,exp(sum(log(value))) as prod
from t
group by tid
having count(distinct case when did in (123,234) then did end) = 2

答案 2 :(得分:0)

根据@gbn Rexster

的良好工作,这是一个here解决方案
SELECT MIN(tmp.value) 
FROM  
(   SELECT MAX(value) AS value 
    FROM temperatureTable 
UNION    
    SELECT MAX(value) AS value 
    FROM resistanceTable
UNION
    SELECT MAX(value) AS value 
    FROM pressureTable
) AS tmp