Presto SQL - 尝试将数据从多个列提取到一个条目中,以查找唯一、缺失或重复的条目



这里新增的SQL/Presto。
如果需要,请随时指出显而易见的内容。

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

我正在尝试进行一个查询,如果每个 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

已编辑 - 我对示例数据走得太远,初始查询已更改。

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 都应该是"重复的",但结果似乎认为随机的是唯一的。

嗯。 我在想:

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;

没有理由为此使用聚合。

最新更新