如何解决Case语句中的SQL查询
| 我有一个名为tblAccount的表,其中有两列: 创建日期 帐户批准日期 DateCreated是创建帐户的日期,AccountApprovalDate是批准帐户的日期。 我需要创建一个名为\'AccountApproval / RejectDate \'的列。这里的拒绝日期是一个派生值。(即)。有一个名为tblDeclinedaccounts的表,当该表中有accountId时,请选择DateCRetaed列。 该列只能有批准日期或拒绝日期。 当AccountApprovalDate不为null时,该值相同。当拒绝日期不为null时,我们需要选择Datecreated列。 我写了以下查询:SELECT AC.Datecreated,\'Approved/Rejected Date\' =
CASE
WHEN AC.AccountApprovalDate IS NOT NULL THEN
(SELECT AC.AccountApprovalDate)
WHEN AC.AccountApprovalDate IS NULL THEN
(SELECT DA.Datecreated
FROM tblDeclinedAccounts DA
INNER JOIN tblAccount AC ON DA.AccountID = AC.AccountID where DA.AccountID IS NOT NULL)
END
FROM tblAccount AC
我在执行时出错:
子查询返回的值超过1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
这需要是一个子查询。
解决方法
为什么它需要成为子查询?只需加入并使用
COALESCE
:
SELECT ac.accountid,COALESCE(ac.approvaldate,da.datecreated) as \'Approved/Rejected Date\'
FROM tblAccount ac
JOIN tblDeclinedAccounts da
ON da.Accountid = ac.Accountid;
,@veredesmarald已经正确。
这是另一种选择。
SELECT ac.accountid,IsNull(ac.approvaldate,da.datecreated) as \'Approved/Rejected Date\'
FROM tblAccount ac
JOIN tblDeclinedAccounts da
ON da.Accountid = ac.Accountid;
,您可以使用MIN
或MAX
来确保拒绝日期是唯一的。
SELECT AC.DateCreated,COALESCE(R.RejectionDate,AC.AccountApprovalDate) [Approved/Rejected Date]
FROM tblAccount AC
LEFT OUTER JOIN
(
SELECT AccountID,MIN(DateCreated) RejectionDate
FROM tblDeclinedAccounts
GROUP BY DateCreated
) AS R ON R.AccountID = AC.AccountID
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。