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

时间:2019-04-10 01:51:23

标签: sql presto

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 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应该全部为“ Dupe”,但结果似乎认为随机数是唯一的。

1 个答案:

答案 0 :(得分:1)

嗯。我在想:

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;

没有理由为此使用聚合。