В случае SQL оба или один или другой - PullRequest
0 голосов
/ 07 февраля 2019

Очень плохо знаком с SQL, поэтому извините за мой основной вопрос.

У меня есть таблица идентификаторов и значений.Некоторые значения отображаются на один элемент, а другие значения отображаются на другой элемент.Я также пытаюсь выделить, когда идентификаторы имеют оба элемента, но сталкиваюсь с проблемами:

SEL 
DISTINCT ID,
CASE 
    WHEN value_id IN (1,2,3,4,5,7,17,18) THEN 'item1' 
    WHEN value_id IN (6,8,9,10,11,12,13,14,15,16) THEN 'item2' 
    WHEN value_id IN (1,2,3,4,5,7,17,18) AND value_id IN (6,8,9,10,11,12,13,14,15,16) THEN 'both' 
    ELSE 0 end AS which_item
FROM table_name
GROUP BY 1, 2

Но я не возвращаю "оба", когда это применимо, пример ID ABCD имеет 2 записи со значениями 'item1'и item2, но не 1 запись с обоими.Я попытался сделать это первым заявлением по делу, но тоже не повезло.

1 Ответ

0 голосов
/ 07 февраля 2019

Вам нужно GROUP BY только на ID и некоторой условной логике.Вот один из методов:

SELECT ID,
       (CASE WHEN SUM(CASE WHEN value_id IN (1, 2, 3, 4, 5, 7, 17, 18) THEN 1 ELSE 0 END) > 0 AND
                  SUM(CASE WHEN value_id IN (6, 8, 9, 10, 11, 12, 13, 14, 15, 16) THEN 1 ELSE 0 END) > 0
             THEN 'both' 
             WHEN SUM(CASE WHEN value_id IN (1, 2, 3, 4, 5, 7, 17, 18) THEN 1 ELSE 0 END) > 0 
             THEN 'item1'
             WHEN SUM(CASE WHEN value_id IN (6, 8, 9, 10, 11, 12, 13, 14, 15, 16) THEN 1 ELSE 0 END)
             THEN 'item2'
             ELSE 'none'
        END) AS which_item
FROM table_name
GROUP BY 1
...