Presto SQL—尝试将多个列中的数据拉入一个条目,以查找唯一的、丢失的或重复的条目

Presto SQL—尝试将多个列中的数据拉入一个条目,以查找唯一的、丢失的或重复的条目,sql,presto,Sql,Presto,这里是SQL/Presto的新成员。 如果需要,请随时指出明显的问题 我有一个子查询,它将数据拉入如下表中。 对于每个ItemID,1表示标记处于打开状态,0表示处于关闭状态 我试图做一个查询,如果每个ItemID都是唯一的,那么它会调出每个ItemID及其关联的标记,否则会指出是否有多个ItemID或者是否缺少它 Data_Table | ItemID | TagA | TagB | TagC | TagD | TagE | | 111 | 1 | 1 | 0 | 0

这里是SQL/Presto的新成员。 如果需要,请随时指出明显的问题

我有一个子查询,它将数据拉入如下表中。 对于每个ItemID,1表示标记处于打开状态,0表示处于关闭状态

我试图做一个查询,如果每个ItemID都是唯一的,那么它会调出每个ItemID及其关联的标记,否则会指出是否有多个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-when语句,该语句提取每个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
编辑-我对示例数据做得太过分,初始查询已更改

itemid111、222、333和666都应该是“Dupe”,但结果似乎认为随机数是唯一的。

Hmmm。我想:

select t.itemId,
       (case when (TagA + TagB + TagC + TagD + TagE) > 1 then 'Dupe'
             when TagA = 1 then 'TagA'
             when TagB = 1 then 'TagB'
             when TagC = 1 then 'TagC'
             when TagD = 1 then 'TagD'
             when TagE = 1 then 'TagE'
             else 'Missing'
        end) as ItemTag
from Data_Table;

没有理由为此使用聚合。

Hey@gordon linoff我对最初的问题进行了深入的探讨。我也在定义内部表。从那以后,我对这个问题进行了调整,使之更具说服力。现在要尝试您的输入!不行。它仍然没有区分独特的案例。示例itemid111仍然根据数据表中的顺序显示一个标记A,而不是显示“Dupe”。
select t.itemId,
       (case when (TagA + TagB + TagC + TagD + TagE) > 1 then 'Dupe'
             when TagA = 1 then 'TagA'
             when TagB = 1 then 'TagB'
             when TagC = 1 then 'TagC'
             when TagD = 1 then 'TagD'
             when TagE = 1 then 'TagE'
             else 'Missing'
        end) as ItemTag
from Data_Table;