Запрос на вывод элемента, отсутствующего в основной таблице, и присвоение ему значения, указывающего, что он не существует - PullRequest
0 голосов
/ 11 февраля 2020

Итак, у меня есть таблица, которая выглядит следующим образом:

item_name | Cost
Item1     | 14
Item2     | 20
Item2     | 50
Item3     | 75
Item3     | 15

И запрос, который выглядит следующим образом:

выберите item_name, sum (cost) из item_costs, где item_name IN ('Item1', 'Item2', 'Item3', 'Item4') GROUP BY item_name

То, что обычно выводится, будет именем элемента и суммой его стоимости. Что выглядит следующим образом:

item_name | Cost
Item1     | 14
Item2     | 70
Item3     | 90

Мы хотим, чтобы он выводил все элементы запроса. Он может вывести «-1» или «0», если элемент отсутствует в основной таблице, в данном случае Item4. Как мы должны изменить наш запрос, чтобы сделать это?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вам необходимо использовать left join; Я бы предложил с values():

select v.item_name, coalesce(sum(ic.cost), 0) as cost
from (values ('Item1'), ('Item2'), ('Item3'), ('Item4')) v(item_name) left join
     item_costs ic
     on ic.item_name = i.item_name
group by v.item_name;
0 голосов
/ 11 февраля 2020

Вы можете использовать values() construct & do left join:

select t.item_name, isnull(sum(tc.Cost), 0) as Cost
from ( values ('Item1'), . . , ('Item4')
     ) t(item_name) left join
     item_costs ic
     on ic.item_name = t.item_name
group by t.item_name;
...