我基本上有两个陈述,用于选择是否使用给定的帐户ID和提交期限来死亡。
当输入具有联名账户持有人的账户时,两个查询(pr和jo)都会返回值以及case语句中显示的正确指标。
当第二个查询没有返回任何值时(因为没有联合帐户持有人被指示为活着或已经死亡),那么case语句似乎不起作用并且不返回任何值。
为什么会发生这种情况,即使第二个表不返回值,如何让case语句仍返回值?
谢谢!
SELECT
CASE
WHEN pr.fintPriDeceased=0 and (jo.fintJointDeceased=0 or jo.fintJointDeceased='')
THEN 0
ELSE 1
END AS fintDeceased
FROM
(SELECT a.FLNGCUSTOMERKEY as flngPrimaryCustomerKey,
a.flngAccountKey as flngPrimaryAccountKey,
CASE
WHEN ci.fdtmCease<>'12-31-9999'
THEN 1
ELSE 0
END AS fintPriDeceased
FROM tblAccount a,
tblPeriod p,
tblCustomerInfo ci
WHERE a.flngAccountKey = @plngAccountKey and
p.fdtmFilingPeriod = @pdtmFilingPeriod and
a.flngAccountKey = p.flngAccountKey and
a.FLNGCUSTOMERKEY = ci.flngCustomerKey) pr
(SELECT a.FLNGCUSTOMERKEY as flngJointCustomerKey,
p.FLNGACCOUNTKEY as flngJointAccountKey,
CASE
WHEN ci.fdtmCease<>'12-31-9999'
THEN 1
ELSE 0
END AS fintJointDeceased
FROM tblAccount a,
tblPeriod p,
tblCustomerInfo ci
WHERE p.FLNGJOINTACCOUNTKEY = @plngAccountKey and
p.fdtmFilingPeriod = @pdtmFilingPeriod and
a.flngAccountKey = p.flngAccountKey and
a.FLNGCUSTOMERKEY = ci.flngCustomerKey) jo
答案 0 :(得分:0)
由于你的上一条评论说“pr总是被填充。jo有时候不是”......
这意味着你需要在{2}之间LEFT OUTER JOIN
(可选的连接)...
这需要明确你的JOIN:你必须有一个ON
子句,确切地说明哪些列被等同/比较。
然后,您还需要在CASE语句中检查IS NULL
,因为没有找到联合帐户。
SELECT
CASE
WHEN pr.fintPriDeceased=0
and (jo.fintJointDeceased IS NULL
OR jo.fintJointDeceased=0)
THEN 0
ELSE 1
END AS fintDeceased
FROM
(SELECT a.FLNGCUSTOMERKEY as flngPrimaryCustomerKey,
a.flngAccountKey as flngPrimaryAccountKey,
CASE
WHEN ci.fdtmCease<>'12-31-9999'
THEN 1
ELSE 0
END AS fintPriDeceased
FROM tblAccount a,
tblPeriod p,
tblCustomerInfo ci
WHERE a.flngAccountKey = @plngAccountKey and
p.fdtmFilingPeriod = @pdtmFilingPeriod and
a.flngAccountKey = p.flngAccountKey and
a.FLNGCUSTOMERKEY = ci.flngCustomerKey) pr
LEFT OUTER JOIN
(SELECT a.FLNGCUSTOMERKEY as flngJointCustomerKey,
p.FLNGACCOUNTKEY as flngJointAccountKey,
CASE
WHEN ci.fdtmCease<>'12-31-9999'
THEN 1
ELSE 0
END AS fintJointDeceased
FROM tblAccount a,
tblPeriod p,
tblCustomerInfo ci
WHERE p.FLNGJOINTACCOUNTKEY = @plngAccountKey and
p.fdtmFilingPeriod = @pdtmFilingPeriod and
a.flngAccountKey = p.flngAccountKey and
a.FLNGCUSTOMERKEY = ci.flngCustomerKey) jo
ON pr.flngPrimaryCustomerKey = jo.flngJointCustomerKey
AND pr.flngPrimaryAccountKey = jo.flngJointAccountKey
(您可能需要更改此ON
子句,位于左上方的LEFT OUTER JOIN的底部...我不知道您的customerkey和accountkey在2个SELECT之间是否通常匹配。)< / p>
希望有所帮助!