новый для SQL / Presto здесь.
Не стесняйтесь указывать на очевидное в случае необходимости.
У меня есть подзапрос, который вытягивает данные в таблицу, как показано ниже.
Для каждого ItemID 1 означает, что тег включен, 0 выключен.
Я пытаюсь создать запрос, который бы подтягивал каждый ItemID со связанным тегом, если он уникален, в противном случае укажите, если их больше одного или их нет.
Data_Table
| ItemID | TagA | TagB | TagC | TagD | TagE |
| 111 | 1 | 1 | 0 | 0 | 0 |
| 222 | 1 | 1 | 1 | 0 | 0 |
| 333 | 1 | 1 | 0 | 0 | 0 |
| 444 | 0 | 1 | 0 | 0 | 0 |
| 555 | 0 | 0 | 0 | 0 | 0 |
| 666 | 0 | 0 | 0 | 1 | 1 |
Я пробовал оператор case, который извлекает каждый 1, и другой запрос case, который пытается преобразовать каждый столбец в одну запись строки.
SELECT Item_ID,
CASE WHEN (Tag_A+Tag_B+Tag_C+Tag_D+Tag_E > 1) THEN 'Dupe'
ELSE (CASE WHEN Tag_A = 1 THEN 'TagA_Present'
WHEN Tag_B = 1 THEN 'TagB_Present'
WHEN Tag_C = 1 THEN 'TagC_Present'
WHEN Tag_D = 1 THEN 'TagD_Present'
WHEN Tag_E = 1 THEN 'TagE_Present'
ELSE 'Missing_Tag' END)
END as ItemTag
FROM Data_Table
РЕДАКТИРОВАНИЕ - Я зашел слишком далеко с примерами данных, и первоначальный запрос был изменен.
Actual Results
| ItemID | ItemTag |
| 111 | Dupe |
| 222 | TagA_Present |
| 333 | TagB_Present |
| 444 | TagB_Present |
| 555 | Missing |
| 666 | TagD_Present |
ItemID 111, 222, 333 и 666 должны быть «Dupe», но результаты кажутся случайными уникальными.