Разделите значение строки 1 на значение строки 2 и поместите его в строку 3 - PullRequest
0 голосов
/ 01 февраля 2019

Я нахожусь в середине задачи, в которой я хочу разделить выручку строки 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 голосов
/ 01 февраля 2019

Вы можете использовать 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 был добавлен во избежание ошибки «Делить на ноль».

0 голосов
/ 01 февраля 2019

Вы можете попробовать следующий запрос.

 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
...