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