首页 > 解决方案 > 不同字段的 Sql 代码

问题描述

我想知道是否有人可以帮助我解决这个问题。

我有两张桌子要连接在一起(DDS2ENVR.QBO AND KCA0001.ORTS

该表有一个标记为NIINQBO和 RIC 的字段。KCA0001.ORTS该表有一个名为 SERVICE 和 OWN_RIC 的字段。

QBO.RIC我通过和加入表格ORTS.OWN_RIC。我的困境是,在 NIIN 字段下,多行可以相同,但 RIC 具有不同的值。

例子:

NIIN         RIC
123455        A
122222        B
123456        C
122222        A

我想查询一个NIINS由不重叠的不同服务分隔的不同计数。因此,示例NIIN应该只找到仅与 A 相关联的不同值,NIIN而在 B、C、D 等中找不到相同的值。

SELECT D.SERVICE, COUNT(C.NIIN)
FROM DDS2ENVR.QBO C 
JOIN KCA0001.ORTS D ON D.OWN_RIC = C.RIC
WHERE C.SITE_ID = ('HEAA')
GROUP BY D.SERVICE
HAVING COUNT(DISTINCT C.NIIN) > 1 

如果这没有任何意义,请提出问题。

标签: sqldb2

解决方案


使用Not Exists

SELECT D.SERVICE, COUNT(C.NIIN)
FROM DDS2ENVR.QBO C 
JOIN KCA0001.ORTS D ON D.OWN_RIC = C.RIC
WHERE C.SITE_ID = ('HEAA')
      and NOT EXISTS (Select 1 from DDS2ENVR.QBO C1 where C1.NIIN = C.NIIN and C1.RIC <> C.RIC)
GROUP BY D.SERVICE
HAVING COUNT(DISTINCT C.NIIN) > 1 

此外,如果表DDS2ENVR.QBO不包含重复项并且您的 dbms 支持CTE

With cte as
(Select NIIN from DDS2ENVR.QBO group by NIIN having count(*) = 1)
SELECT D.SERVICE, COUNT(C.NIIN)
FROM DDS2ENVR.QBO C 
JOIN KCA0001.ORTS D ON D.OWN_RIC = C.RIC
WHERE C.SITE_ID = ('HEAA')
      and C.NIIN in (Select * from cte)    
GROUP BY D.SERVICE
HAVING COUNT(DISTINCT C.NIIN) > 1 

推荐阅读