【问题标题】:Combine Rows output for multiple column checks为多列检查组合行输出
【发布时间】:2016-04-19 19:55:42
【问题描述】:

我想根据多列检查将多行合并为单行。

只有当所有剩余的列都匹配时,Program_Type 才应该以逗号分隔合并。

我尝试使用 listagg 但我无法实现它。我也尝试使用 connect by 但仍然无法检查所有条件。

任何帮助。

问候。

【问题讨论】:

    标签: plsql listagg


    【解决方案1】:

    像这样的

    select 
    listagg(PROGRAM_TYPE,',')
    within group ( order by PROGRAM_TYPE DESC ) as PROG_GROUP
    from emp 
    

    输出:

    XYZ,MNO
    

    如果您想在单个查询中包含所有列

    With PROGRAM1_TYPE 
    as (
    select distinct id,prog_type
    from
    (
    select id,listagg(PROGRAM_TYPE,',') within group ( order by PROGRAM_TYPE DESC ) 
    over (partition by id ) prog_type
    from emp
    )
    )select distinct e.id,e.name,prog_type PROGRAM_TYPE,
    e.MNAME,e.type --add remaining columns here
    from  PROGRAM1_TYPE p,emp e 
    where p.id=e.id
    

    O/p - 截图

    【讨论】:

      【解决方案2】:

      如果您只有一两个需要简化的大表,那么您可以通过几个步骤轻松完成此操作

      1. 按任何需要相同的列(例如 ID)进行排序。
      2. 在一个额外的列中编写一个函数来检测哪些行与下面的行相同,哪些行不同 - 类似于第 3 行的行 - IF(AND(A3=A4, B3=B4), "same ","最后")。
      3. 如果行相同,则在另一列中添加一个方程式以连接程序类型,例如。 =IF(F3="last",C4,G3&", "&C4)
      4. 设置好值后,在两列上复制并“粘贴结果”(这样您得到的是值而不是方程式)
      5. 按相同/最后一列排序,保留“最后”行并丢弃“相同”

      当然,如果您需要重复执行此操作,那么这是一个繁琐的解决方案,您可能应该使用宏或数据库程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多