Oracle 在SQL中将多行汇总为一行

Oracle 在SQL中将多行汇总为一行,oracle,plsql,Oracle,Plsql,如何将同一个人的不同列中的值(最好使用PL/SQL)滚动到一列中 我想将其转换为: NAME SUB1 SUB2 SUB3 SUB4 A PASS A PASS A PASS A PASS 进入: NAME SUB1 SUB2 SUB3 SUB4

如何将同一个人的不同列中的值(最好使用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

我试着使用'stuff'函数,但这只适用于将所有值合并到一个字段中。有什么方法可以做到这一点吗?

一堆max完成了这项工作(至少,根据您目前发布的内容)


顺便问一下,你的意思是说“最好使用SQL”?为什么要使用PL/SQL?

大量的MAX完成了这项工作(至少,根据您目前发布的内容)


顺便问一下,你的意思是说“最好使用SQL”?为什么要使用PL/SQL?

为什么要使用存储过程?这可以通过使用普通sqlserver来实现为什么需要存储过程?这可以使用普通SQL来完成
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>