我正在执行一项任务,我想将第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)
答案 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