在SQL中将多行汇总

时间:2018-08-24 20:52:45

标签: oracle plsql

如何将同一个人A的不同列中的值(最好使用PL / SQL)汇总到一列中?

我想将其转换为

    NAME  SUB1  SUB2    SUB3    SUB4
     A                          PASS
     A                  PASS    
     A          PASS        
     A   PASS           

进入:

     NAME   SUB1    SUB2    SUB3    SUB4
      A     PASS    PASS    PASS    PASS

我试图使用“填充”功能,但这只会在一个领域内囊括所有价值。有办法吗?

1 个答案:

答案 0 :(得分:4)

一堆MAX可以完成这项工作(至少根据您到目前为止发布的内容)。

SQL> with test (name, sub1, sub2, sub3, sub4) as
  2    (select 'a', null, null, null, 'pass' from dual union all
  3     select 'a', null, null, 'pass', null from dual union all
  4     select 'a', null, 'pass', null, null from dual union all
  5     select 'a', 'pass', null, null, null from dual
  6    )
  7  select name, max(sub1) sub1, max(sub2) sub2, max(sub3) sub3, max(sub4) sub4
  8  from test
  9  group by name;

N SUB1 SUB2 SUB3 SUB4
- ---- ---- ---- ----
a pass pass pass pass

SQL>

顺便说一句,您实际上是说“最好使用 SQL ”吗?为什么要涉及PL / SQL?