Выделите строку в несколько рядов, при этом строка будет иметь другой расчет - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть таблица Allowance (Имя, Значение, Дата, Пособие)

У меня есть много значений строки. С одним «Именем» я выбираю 2 имени

Я пишу вСценарий ниже

select s.name, coalesce(v.name, s.name) AS 'Name1'
from Allowance s left join
     (values ('A', 'Allowance1'),
             ('A', 'Allowance2')
     ) v(old_name, name)
     on v.old_name = s.name

и результат:

 Name|  Name1       | Value    | Date
-----+--------------+----------+---------
 A   |  Allowance1  |          | 2019-01-01
 A   |  Allowance2  |          | 2019-01-01

Со значениями столбца Name1 с есть другие вычисления (столбец Value) Пример:

With Allowance1: I have a script
select sum(value) from Allowance where Allowance='1' group by Name
Result: 145

With Allowance2: I have a script
select sum(value) from Allowance where Allowance='1' or Allowance='2' group by Name

Result: 123

Как выбрать результат ниже?

 Name|  Name1       | Value    | Date
-----+--------------+----------+---------
 A   |  Allowance1  |    145   | 2019-01-01
 A   |  Allowance2  |    123   | 2019-01-01

Пожалуйста, помогите мне решить проблему.

1 Ответ

0 голосов
/ 27 сентября 2019

Я думаю, вы хотите что-то вроде этого:

select s.name, coalesce(v.name, s.name) AS Name1, v.value
from (select name,
             sum(case when Allowance in (1) then value end) as value_1,
             sum(case when Allowance in (1, 2) then value end) as value_2
      from Allowance s
      group by name
     ) s left join
     (values ('A', 'Allowance1', value_1),
             ('A', 'Allowance2', value_2)
     ) v(old_name, name, value)
     on v.old_name = s.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...