Конденсированные записи в SQL Server - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь найти количество заказов с комбинацией продуктов 1 и 2 или 1 и 3. Сейчас у меня есть данные, но они не объединяют записи в одну, которая мне нужна.

Я использовал оператор case, чтобы получить счетчик для каждого заказа и затем ввести его в Excel для анализа.

select  
b.Order, 
CASE when Style in ('2','3') then '1' else '0' end as Pants,
CASE when Style = '1' then '1' else '0' end as Tunic
FROM a
INNER JOIN b ON a.join1 = b.join1 
INNER JOIN c ON b.join2 = c.join2
 WHERE Style IN ('1','2','3')
 group by b.order, Style
 order by b.order

пример выходного тока:

order        pants        tunic
abc            1            0
abc            0            1

Пример желаемого результата:

order        pants        tunic
abc            1            1

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вам нужна условная агрегация.Для индикатора используйте max(), для подсчета - sum():

select b.Order, 
       max(case when Style in (2, 3) then 1 else 0 end) as Pants,
       max(case when Style = 1 then 1 else 0 end)  as Tunic
from a join
     b 
     on a.join1 = b.join1 join
     c
     on b.join2 = c.join2
where style in (1, 2, 3)
group by b.order
order by b.order;

Примечания:

  • Исправление удаляет style из group byи добавление функций агрегирования в select.
  • Не используйте одинарные кавычки вокруг чисел.
  • Я предполагаю, что style - это число, а не строка, поэтому я удалилодинарные кавычки.Если это действительно строка, то используйте одинарные кавычки.
  • order - это действительно плохое имя для столбца, потому что это ключевое слово SQL.
0 голосов
/ 19 июня 2019

использовать агрегацию

select  
b.Order, 
sum(CASE when Style in ('2','3') then 1 else 0 end) as Pants,
sum(CASE when Style = '1' then 1 else 0 end) as Tunic
FROM a
INNER JOIN b ON a.join1 = b.join1 
INNER JOIN c ON b.join2 = c.join2
 WHERE Style IN ('1','2','3')
 group by b.order, Style
 order by b.order

Кстати, каков тип данных Style потому что вы использовали кавычку в условии, что это нормально, если это строковый тип, но в случае int это тогда должно быть style=1 и style in (1,2,3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...