我们有一个表partners
,我想要一个sql语句,该语句将根据下面的示例数据返回第5行和第6行。逻辑是每个partner2
都会有一个默认值partner1
,该默认值由字段XDFREL
标识,值为X
。
在某些情况下,XDFREL
的填充数量超过1,例如第5行和第6行的partner1 = 08021262
。我需要该表中的所有记录(而不是计数),其中XDFREL
更大每partner2
中有1个以上。结果的一个示例是它将返回第5行和第6行的记录...因为partner2 08021262
在partner1
字段中有两个记录,其中XDFREL
填充了X
。
预先感谢
No| Partner1| Partner2| DateFrom| DateTo | XDFREL
01| 07380858| 08021262| 2/1/2018| 12/31/9999|
02| 07342746| 08021262| 2/1/2017| 12/31/9999|
03| 07342744| 08021262| 8/7/2017| 12/31/9999|
04| 07340195| 08021262| 5/4/2017| 12/31/9999|
05| 07100325| 08021262| 1/1/2001| 12/31/9999| X
06| 07073790| 08021262| 2/1/2017| 12/31/9999| X
07| 07517785| 08427151| 8/7/2017| 12/31/9999| X
08| 07517786| 08427152| 8/8/2017| 12/31/9999| X
09| 07517787| 08427152| 8/8/2017| 12/31/9999|
我可以得到计数,但是我需要实际值partner1
select count(B5.PARTNER1), B5.PARTNER2
from partners B5
where B5.XDFREL = 'X'
and TO_DATE(B5.DATE_TO , 'YYYYMMDD') > TRUNC(sysdate)
group by B5.PARTNER2
having count(B5.PARTNER1) > 1
答案 0 :(得分:0)
考虑将汇总查询重新加入单位级别:
with agg AS (
select count(B5.PARTNER1), B5.PARTNER2
from partners B5
where B5.XDFREL = 'X'
and TO_DATE(B5.DATE_TO, 'YYYYMMDD') > TRUNC(sysdate)
group by B5.PARTNER2
having count(B5.PARTNER1) > 1
)
select p.PARTNER1, p.PARTNER2, P.DATE_TO
from partners p
inner join agg
on p.PARTNER2 = agg.PARTNER2
and p.XDFREL = 'X'
and TO_DATE(p.DATE_TO, 'YYYYMMDD') > TRUNC(sysdate)
答案 1 :(得分:0)
您可以使用EXISTS做到这一点:
with cte as (
select *
from partners
where XDFREL = 'X' and TO_DATE(DATE_TO , 'YYYYMMDD') > TRUNC(sysdate)
)
select c.*
from cte c
where exists (
select 1 from cte
where partner2 = c.partner2 and partner1 <> c.partner1
)