【发布时间】:2023-04-09 20:51:02
【问题描述】:
我运行这个查询:
SELECT
CAST(PolicyNumber AS varchar(50)) POLICYNUMBER,
CAST(EFFECTIVEDATE AS DATE) EFFECTIVEDATE ,
MAX(CAST(EXPIRATIONDATE AS DATE)) EXPIRATIONDATE,
CAST(ISSUINGCOMPANY AS varchar(4)) AS INSURER,
CAST(INSUREDLEGALNAME AS varchar(250)) AS INSUREDNAME,
PROGRAM,
MAX(CAST(CANCELDATE AS DATE)) AS CANCELDATE,
CAST(INSUREDADDR1 AS varchar(500)) AS INSUREDADDR1,
CAST(INSUREDADDR2 AS varchar(500)) AS INSUREDADDR2,
CAST(INSUREDCITY AS varchar(500)) AS INSUREDCITY,
CAST(INSUREDSTATE AS varchar(20)) AS INSUREDSTATE,
CAST(INSUREDZIP AS varchar(20)) AS INSUREDZIP ,
(SELECT SourceId FROM STG.[Source] WHERE [SystemName] = 'CRU') AS SOURCESYSTEMID
,(Select ProgramInclude = CASE WHEN ProgramInClude = 'Y' THEN 1 Else 0 END
From STG.LPT L INNER Join SRC.Policy C ON C.Program = L.ProgramCode ) AS LPT
FROM SRC.Policy
GROUP BY POLICYNUMBER,
EFFECTIVEDATE,
ISSUINGCOMPANY,
INSUREDLEGALNAME,
PROGRAM,
INSUREDADDR1,
INSUREDADDR2,
INSUREDCITY,
INSUREDSTATE,
INSUREDZIP
得到这个结果:
消息 512,第 16 级,状态 1,第 16 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。 警告:空值被聚合或其他 SET 操作消除。
有什么想法吗?
【问题讨论】:
-
是的,您的子查询返回多个结果...错误非常明确。
-
@DaleK 感谢您的回复,但您能提出一些解决方案吗?
-
只有您知道您的数据库,您使用的 2 个子查询中的 1 个未返回唯一结果。检查你的逻辑,找出为什么你会得到重复,并决定如何避免它。在没有看到您的数据或不了解您的业务逻辑的情况下,我们无法修复它。
-
对于
LPT,您的查询不引用外部查询。我很确定这是你的错误。 -
这个
(Select ProgramInclude = CASE WHEN ProgramInClude = 'Y' THEN 1 Else 0 END From STG.LPT L INNER Join SRC.Policy C ON C.Program = L.ProgramCode )没有where子句,这很可能是问题所在。
标签: sql sql-server tsql ssms-2016