我有2张桌子。第一个是MYTABLE.MAR
,第二个是MYTABLE.MHR
。 MAR
列DOCNO
和DT_CLOSED
,MHR
列DOCNO
,STA_CD
,STA_DT
。
DOCNO
中的MHR
列可以在STA_CD
中包含多个数据。对于每个DOCNO
,我需要获得MIN(STA_DT) where STA_CD = 'P2'
和MAX(STA_DT) where STA_CD = 'C3'
。我可以使用以下代码获取其中一个STA_CD标准的正确信息:
SELECT
A.DOCNO, A.DT_CLOSED, B.STA_DT AS PICK_DATE
FROM
MYTABLE.MAR A
LEFT OUTER JOIN
MYTABLE.MHR B ON B.DOCNO = A.DOCNO
WHERE
B.STA_DT = (SELECT MIN(B.STA_DT)
FROM MYTABLE.MHR B
WHERE B.DOCNO = A.DOCNO AND B.STA_CD = 'P2')
AND A.DT_CLOSED = '2018041'
GROUP BY
A.DOCNO, A.DT_CLOSED, B.STA_DT
示例数据:
DOCNO DT_CLOSED STA_CD PICK_DT PACK_DT
---------------------------------------------------------------
ABCD 2018041 P2 2/12/18
ABCD 2018041 C35 2/13/18
ABCD 2018041 P2 2/13/18
ABCD 2018041 C35 2/14/18
为DocNo获取Min Pick_date(STA_DT,其中STA_CD ='P2')和Max Pack_Date(STA_DT,其中STA_CD ='C35')的预期结果
DOCNO DT_CLOSED PICK_DATE PACK_DATE
-------------------------------------------
ABCD 2018041 2/12/18 2/14/18
我尝试过选择加入子查询并在此处搜索了许多类似的主题,但无法获得此结果以产生所需的结果。任何帮助,将不胜感激。这是我的第一个问题,我是SQL的新手所以要温柔。感谢。
答案 0 :(得分:0)
SELECT
A.DOCNO, A.DT_CLOSED, MIN (CASE WHEN B.STA_CD ='P2' THEN B.STA_DT ELSE null END) , MAX (CASE WHEN B.STA_CD ='C35' THEN B.STA_DT ELSE null END)
FROM
MYTABLE.MAR A
LEFT OUTER JOIN
MYTABLE.MHR B ON B.DOCNO = A.DOCNO
GROUP BY
A.DOCNO, A.DT_CLOSED
我正在使用TSQL,但其他人应该类似
答案 1 :(得分:0)
您可以分别创建包含最小值和最大值的辅助表格,然后按mar
将它们加到docno
表格中,如下所示:
select
mar.docno,
mar.dt_closed
t_min.min_sta_dt,
t_max.max_sta_dt
from mar
left outer join
(select docno, min(sta_dt) as min_sta_dt
from mhr
where sta_cd = 'P2'
group by docno) t_min on mar.docno = t_min.docno
left outer join
(select docno, max(sta_dt) as max_sta_dt
from mhr
where sta_dt = 'C3'
group by docno) t_max on mar.docno = t_max.docno
我正在使用标准SQL,但无法访问DB2实例,因此我希望它能为您提供开箱即用的功能。