learning_new Ответов: 1

Создание 2 столбцов на основе условия


Итак, у меня есть опросная сказка, где кому - то задают примерно 5 вопросов. 3 из этих вопросов являются одними и теми же вопросами, варианты ответов на которые различны . вот эти вопросы:
Удостоверение Вопрос Ответ
101005 какие марки вы покупали за последние 5 месяцев Coca-Cola, Pepsi или vitamin
101005 какие бренды вы приобрели за последние 5 месяцев Dr Pepper
101005 какие бренды вы покупали за последние 5 месяцев другие более дешевые бренды
101005 какие бренды вы приобрели за последние 5 месяцев Coca-Cola

Цель состоит в том, чтобы создать два дополнительных столбца, которые показывают, что если кто-то выбирает coca-cola, то он является существующим клиентом, отмеченным как 1, а potential_customer будет равен 0, и наоборот. К сожалению, код, который я до сих пор назначить этому пользователю 1 ПО для его Доктор Пеппер ответа. Что я могу сделать, чтобы этот код все еще распознавал этих пользователей.

Что я уже пробовал:

select [ID],[question],[answer],
         
 Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)>=1 then 1 else 0 end  existing_customer
,Case when Sum(Case when [answer] like'%coca-cola%' then 1 else 0 end)=0 then 1 else 0 end  potential_customer

group by id,question, answer 

Tomas Takac

Для меня сканирование определенной строки поднимает красный флаг, странно жестко кодировать ее таким образом. Я чувствую, что эти флаги являются атрибутами ответ само собой так если у вас есть сущность опрос и сущность ответ затем объединение и агрегирование некоторыми personid я должен дать тебе ответ.

1 Ответов

Рейтинг:
9

Maciej Los

Если я правильно вас понял... вам нужно изменить свой запрос следующим образом:

select [ID],[question],[answer],
 COUNT(CASE WHEN [answer] LIKE'%coca-cola%' THEN 1 ELSE NULL END) existing_customer
,COUNT(CASE WHEN NOT [answer] LIKE'%coca-cola%' THEN 1 ELSE NULL END) potential_customer
group by id,question, answer


Почему?
MSDN писал:
COUNT(*) возвращает количество элементов в группе. Это включает в себя нулевые значения и дубликаты.

COUNT(ALL expression) вычисляет выражение для каждой строки в группе и возвращает количество значение, отличное от null ценности.

COUNT(DISTINCT expression) вычисляет выражение для каждой строки в группе и возвращает количество уникальных ненулевых значений.

Источник: COUNT (Transact-SQL) - SQL Server | Microsoft Docs[^]


Richard Deeming

В вашем запросе есть синтаксическая ошибка - вы пропускаете THEN ... END на обоих наружных CASE заявления.

Maciej Los

Исправлено!
Первый случай в обеих строках был избыточным ;)
- Спасибо, Ричард.