将行1的值除以行2的值并将其放在行3中

时间:2019-02-01 12:03:49

标签: sql sql-server tsql sql-server-2012

我正在执行一项任务,我想将第1行的收入除以第2行的收入,然后将其放在第3行。如何实现?请注意,第3行不存在,应使用查询进行构造。

数据集:

Name Date Quarter Type Revenue
A1 2018-12-31 4q2018 x1 5000
A1 2018-12-31 4q2018 x2 2000
A1 2018-12-31 4q2018 xdiv 2.5 (expected output)
A1 2018-09-30 3q2018 x1 5000
A1 2018-09-30 3q2018 x2 1000
A1 2018-09-30 3q2018 xdiv 5 (expected output)
B1 2018-12-31 4q2018 x1 5000
B1 2018-12-31 4q2018 x2 5000
B1 2018-12-31 4q2018 xdiv 1 (expected output)
B1 2018-09-30 3q2018 x1 10000
B1 2018-09-30 3q2018 x2 1000
B1 2018-09-30 3q2018 xdiv 10 (expected output)

2 个答案:

答案 0 :(得分:1)

您可以为此使用UNION ALL

在第一查询只需选择X1&X2
第二个联合查询添加了xdiv
最后的ORDER BY对并集的结果进行排序。

SELECT [Name], [Date], [Quarter], [Type], CAST(Revenue AS FLOAT) AS Revenue
FROM YourTable
WHERE [Type] IN ('x1','x2')

UNION ALL

SELECT x1.[Name], x1.[Date], x1.[Quarter], 'xdiv', (x1.Revenue * 1.0 / NULLIF(x2.Revenue,0))
FROM YourTable x1
JOIN YourTable x2 ON (x2.[Name] = x1.[Name] AND x2.[Date] = x1.[Date] AND x2.[Type] = 'x2')
WHERE x1.[Type] = 'x1'

ORDER BY [Name], [Date] DESC, [Type]

添加了NULLIF以避免出现“被零除”错误。

答案 1 :(得分:0)

您可以尝试以下查询。

 UPDATE R3 SET R3.VALUE=(R1.VALUE/R2.VALUE) FROM Table1 R3 
    LEFT JOIN  Table1 R1 ON R1.id = 1  
    LEFT JOIN Table1 R2 ON R2.ID = 2
    WHERE R3.id=3