自我参考表 - 压缩到一行 - 计算值

时间:2017-06-28 20:27:58

标签: sql sql-server-2012

我正在尝试创建一个SQL Server 2012查询,将下面的表格转换为下面所需的输出。

分母和分子在T1行中提供。 T2和T3值在不同的行上提供。需要使用这两个值(T2和T3)计算值。

Table               
Identifier        Tdate           Denominator   Numerator   Value
T1                05/01/2014      T2            T3  
T2                05/01/2014                                50
T3                05/01/2014                                5
T1                06/01/2014      T2            T3  
T2                06/01/2014                                80
T3                06/01/2014                                4

期望的输出:

Identifier  Tdate       Denominator Numerator   Value   DenNum  NumNum
T1          05/01/2014  T2          T3          0.100   50      5
T1          06/01/2014  T2          T3          0.050   80      4

我尝试过很多东西,但没有成功。下面是最新的,只是为了展示我所做的,但不要认为这是一个优雅的解决方案。这显然是不完整的。

SELECT  E.Identifier,
        E.Denominator, 
        E.Numerator, 
        M.Identifier, 
        M.Denominator, 
        M.Numerator, 
        E.Value, 
        M.Value 
FROM    Table   E, 
        Table   M
WHERE   (E.Identifier = M.Denominator OR E.Identifier = M.Numerator)
AND     E.Tdate in ('05/01/2014')
AND     M.Tdate in ('05/01/2014');

1 个答案:

答案 0 :(得分:0)

似乎自我加入可以满足您的需求:

select t.*,
       tn.value / td.value, td.value as dennum, tn.value as numnum 
from t join
     t td
     on t.denominator = td.identifier and t.tdate = td.tdate join
     t tn
     on t.numerator = tn.identifier and t.tdate = tn.tdate
where t.identifier = 'T1';

注意:如果value是整数,则使用tn.value * 1.0 / td.value。 SQL Server进行整数除法。