首页 > 解决方案 > 以下场景的输出

问题描述

有 2 张桌子 T1 和 T2

在 T1 表 view_report 列中它是空的在 T2 表中有 6 列,数据如下所示

Q1 Q2 Q3 Q4 Q5 Q6
1  1  1  0  0  0
0  1  0   1  0  0
1  0  0  0   0   0

我想通过检查 T2 表中的所有 5 列数据来填充 view_report 列,例如当 Q1 = 1 然后 A Q2 = 1 然后 B 等等

注意:对于所有 6 列,如果不等于 1,那么它应该为 null

但在第一行,如果我们有 Q1、Q2、Q3 的值为 1,那么我的输出应该是 A、B、C

请帮助我在 Oracle SQL 中解决这个问题

标签: sqloraclejoinoracle11gcase

解决方案


我想你想要一个有标志的列的列表:

select t.*,
       trim(',' from
            (case q1 when 1 then 'A' || ',' end ||
             case q2 when 1 then 'B' || ',' end ||
             case q3 when 1 then 'C' || ',' end ||
             case q4 when 1 then 'D' || ',' end ||
             case q5 when 1 then 'E' || ',' end ||
             case q6 when 1 then 'F' || ',' end
            )
           ) as view_report
from t;
         

推荐阅读