отчетливо сгруппированы по результатам с указанием регистра - PullRequest
0 голосов
/ 30 января 2019

enter image description here

Я не мог придумать хороший заголовок для этого.У меня есть данные на первом рисунке.Если у человека есть синий или зеленый, я хочу, чтобы запрос возвратил в одной строке Person в виде одного столбца, а затем «Да» во втором столбце (я могу сделать этот шаг с помощью оператора case).Если у человека есть все другие цвета, я хочу, чтобы он возвратил имя человека и «Нет» во втором столбце.Группировка «По» важна, потому что я просто хочу, чтобы люди появлялись один раз с «да» во втором столбце, если у них есть синий или зеленый, или «нет», если их нет.

Как должны выглядеть результаты

enter image description here

Ответы [ 3 ]

0 голосов
/ 30 января 2019

См. Ниже подход с использованием common table expression.Это возвращает ожидаемый результат

;WITH YES_RES AS
(
    SELECT DISTINCT PERSON, 'YES' AS RES FROM tabname
    WHERE COLOR IN ('Blue', 'Green')
),
NO_RES AS
(
    SELECT DISTINCT PERSON, 'NO' AS RES FROM tabname
    WHERE PERSON NOT IN (SELECT DISTINCT PERSON FROM YES_RES)
)
SELECT PERSON, RES FROM YES_RES
UNION
SELECT PERSON, RES FROM NO_RES
0 голосов
/ 30 января 2019

Я бы использовал условную агрегацию:

select person,
       (case when sum(case when color in ('blue', 'green') then 1 else 0 end) > 0
             then 'Yes' else 'No'
        end) as flag
from t
group by person
0 голосов
/ 30 января 2019

Множество способов сделать это, но так как вы, похоже, хотите использовать GROUP BY и CASE, вы можете получить MAX CASE, когда цвет синий или зеленый THEN 1, ELSE 0.

Это даст вам каждое имя либо с 1, либо с 0, а затем вы можете использовать другой CASE или REPLACE, чтобы изменить 1 на «да» и 0 на «нет».

Другой подход, которыйможет быть более эффективным и легким для чтения / поддержки, будет выбирать имена DISTINCT и делать CASE WHEN EXISTS () с коррелированным подзапросом, который проверяет, существует ли какая-либо запись с таким именем и синим или зеленым.КОГДА СУЩЕСТВУЕТ (...) ТОГДА «да», ДАЖЕ «нет».

...