Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
涉及Listag的DB2 SQL_Sql_Db2 - Fatal编程技术网

涉及Listag的DB2 SQL

涉及Listag的DB2 SQL,sql,db2,Sql,Db2,我有一个如下的数据集 DEPT_ID EMP_NM STATUS_DATE LEFT_FLAG STATUS_CHANGE 1 ABC 20200131 0 N 1 DEF 20200204 0 N 1 DEF 20200504 0 Y 1 XYZ

我有一个如下的数据集

  DEPT_ID  EMP_NM   STATUS_DATE    LEFT_FLAG      STATUS_CHANGE
    1       ABC      20200131        0            N
    1       DEF      20200204        0            N
    1       DEF      20200504        0            Y
    1       XYZ      20201210        0            N
    1       MNO      20201210        0            N
    1       DEF      20201230        1            N
    1       XYZ      20201230        0            Y
    1       PQR      20210123        0            N
    1       ABC      20210228        1            N
    1       XYZ      20210228        1            N
  DEPT_ID  EMP_NM               STATUS_DATE    
    1       ABC                  20200131        
    1       ABC,DEF              20200204  
    1       ABC,DEF              20200504      
    1       ABC,DEF,XYZ,MNO      20201210        
    1       ABC,XYZ,MNO          20201230        
    1       ABC,XYZ,MNO,PQR      20210123        
    1       MNO,PQR              20210228   
现在我想生成如下所示的输出

  DEPT_ID  EMP_NM   STATUS_DATE    LEFT_FLAG      STATUS_CHANGE
    1       ABC      20200131        0            N
    1       DEF      20200204        0            N
    1       DEF      20200504        0            Y
    1       XYZ      20201210        0            N
    1       MNO      20201210        0            N
    1       DEF      20201230        1            N
    1       XYZ      20201230        0            Y
    1       PQR      20210123        0            N
    1       ABC      20210228        1            N
    1       XYZ      20210228        1            N
  DEPT_ID  EMP_NM               STATUS_DATE    
    1       ABC                  20200131        
    1       ABC,DEF              20200204  
    1       ABC,DEF              20200504      
    1       ABC,DEF,XYZ,MNO      20201210        
    1       ABC,XYZ,MNO          20201230        
    1       ABC,XYZ,MNO,PQR      20210123        
    1       MNO,PQR              20210228   

我尝试使用Listag,但无法消除重复项,也无法在LEFT_FLAG=1时删除。如果我理解正确,您每次都需要一份员工列表。状态标志似乎与相关性有关

此版本应在DB2中工作:

select dept_id, status_date, listagg(emp_nm, ',') within group (order by emp_nm)
from (select t.dept_id, t.status_date, t2.status_date as status_date_2, t2.left_flag, t2.emp_nm,
              row_number() over (partition by t.status_date, t2.dept_id, t2.emp_nm order by t2.status_date desc) as seqnum
      from (select dept_id, status_date
            from t 
            group by dept_id, status_date
           ) t left join
           t t2
           on t2.dept_id = t.dept_id and t2.status_date <= t.status_date
     ) tt2
where seqnum = 1 and left_flag = 0
group by dept_id, status_date;
他是一把小提琴

这个版本没有,因为对于DB2来说,correlation子句嵌套得太深了:

select t.dept_id, t.status_date,
       (select listagg(t2.emp_nm, ',') within group (order by t2.emp_nm)
        from (select t2.emp_nm,
                     row_number() over (partition by t2.dept_id, t2.emp_nm order by t2.status_date desc) as seqnum
              from t t2
              where t2.status_date <= t.status_date and
                    t2.dept_id = t.dept_id
             ) t2
        where t2.seqnum = 1 and t2.left_flag = 0
       ) as emps
from t
group by dept_id, status_date;

你的逻辑不是100%清楚。行不是累积的。它在DB2V11.x中支持吗?应该在DB2LUW10.5+中工作。Listag在DB2中没有下划线。它没有找到t2.left_标志。因为它不在t2中,所以它在emps中为所有行提供了相同的值,它仍然没有处理左_标志。对于左_标志,我想删除这些EMP