我想在USER表中查找公司ID/用户ID组合的列表,这些组合在ACCOUNT表中至少有一个帐户,但所有帐户都已关闭。(如果公司ID/用户ID没有帐户(在帐户上)(在USER上),则不应出现在结果中)。如果只有一个CompanyID/UserID的帐户(在USER上)为OPEN(在ACCOUNT表上),则公司ID/用户ID不应在列表中。
在下面的示例中,ABC/USER 3是唯一符合此条件的组合。它有2个帐户(333和666),并且都已关闭。其余的公司标识/用户标识组合至少有1个“帐户”为“未结”。DDD/USER 5被排除在外,因为888不在"帐户“表中。
表:用户
| 公司ID|用户ID|客户|
| - -|- -|- -|
| 美国汽车协会|用户1|一一一|
| 美国汽车协会|用户1|三百三十三个|
| ABB公司|用户2|三百三十三个|
| ABB公司|用户2|四百四十四|
| ABC公司|用户3|三百三十三个|
| ABC公司|用户3|六百六十六|
| 血脑屏障|用户4|五五五|
| CCC认证|用户4|六百六十六|
| 限定日|用户5|八百八十八|
表:账户
| 客户|状态|
| - -|- -|
| 一一一|未结|
| 二百二十二人|未结|
| 三百三十三个|已关闭|
| 四百四十四|未结|
| 五五五|未结|
| 六百六十六|已关闭|
| 小行星七百七十七|未结|
我用表名编写了最初的问题,我认为这样会更容易理解(而不是我使用的实际DB2表)NB002.NBTBAUTH(是USERS)NB002.NBTBMF(是ACCOUNT)
这是我尝试使用的SQL:
SELECT NB002.NBTBAUTH.*, Q.USERID, Q.CNTOPEN
FROM NB002.NBTBAUTH LEFT JOIN (SELECT NB002.NBTBAUTH.USERID,
COUNT(IF(NB002.NBTBMF.ACCOUNTSTATUS = 'OPEN',1,NULL)) AS CNTOPEN
FROM USERS INNER JOIN NB002.NBTBMF ON NB002.NBTBAUTH.ACCOUNTID
= NB002.NBTBMF.ACCOUNTID
GROUP BY USERID) AS Q ON NB002.NBTBAUTH.USERID = Q.USERID
WHERE NOT Q.USERID IS NULL AND Q.CNTOPEN = 0;
错误消息:
SQLCODE -104非法符号“="。
是第一个=引起的,我把它改成了〈,〈也得到了同样的消息。
1条答案
按热度按时间zvokhttg1#
| 用户ID|
| - -|
| 用户3|
不清楚USER标识符是什么-是
USERID
还是(COMPANYID, USERID)
。如果是后者,则将U.COMPANYID
添加到GROUP BY
和SELECT
中。