我正在尝试创建一个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');
答案 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进行整数除法。