我有以下SQL代码,但并没有达到我想要的结果。
SELECT
POLICIES.CLIENTS_ID,
POLICIES.CLIENTCODE,
COUNT(POLICIES.POLICIES_ID) as [Total Policies],
(
SELECT
COUNT(POLICIES.POLICIES_ID)
FROM
POLICIES
WHERE
POLICIES.COVCODE = 'AUT'
) as [Auto Policies]
FROM
POLICIES
LEFT JOIN CLIENTS
ON CLIENTS.CLIENTS_ID = POLICIES.CLIENTS_ID
WHERE
POLICIES.CNR IS NULL
GROUP BY
POLICIES.CLIENTS_ID,
POLICIES.CLIENTCODE
ORDER BY
POLICIES.CLIENTS_ID
我得到这样的结果:
ID CODE Total Auto
3 ABCDE1 1 999999
4 ABCDE2 1 999999
5 ABCDE3 2 999999
6 ABCDE4 2 999999
我希望在最后一列中为该clientid存在的自动策略总数,而不是所有存在的自动策略。我相信我需要一个嵌套的select语句,以某种方式将所有类似的结果分组在clientid上,但是最终返回的行数超过了1行,并引发了错误。
如果我添加:
GROUP BY
POLICIES.CLIENTS_ID
我得到:
Subquery returned more than 1 value. This is not permitted when the....
任何帮助将不胜感激!谢谢
您可以使用CASE语句执行此操作。代替SELECT子句中的子查询,请使用:
SUM(CASE WHEN POLICIES.COVCODE = 'AUT' THEN 1 ELSE 0 END) as [AUTO POLICIES]
正如马丁·史密斯(Martin Smith)所指出的。如果client_id有多个client_codes,则这将为您提供client_id / client_code每种组合的记录数。如果client_id与client_code是1:1,则这将为您提供每个不同的client_id的记录计数,我怀疑您的示例和问题中的情况是这样。
无关:您的Clients
表具有LEFT JOIN ,但您在Clients
查询时不会在任何地方使用表。如果您不需要选择或按其任何字段进行过滤,请考虑将其删除,因为这只是未使用的开销。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句