我有一个名为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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
这需要是一个子查询。
答案 0 :(得分:3)
为什么需要成为子查询?只需加入并使用COALESCE
:
SELECT ac.accountid, COALESCE(ac.approvaldate, da.datecreated) as 'Approved/Rejected Date'
FROM tblAccount ac
JOIN tblDeclinedAccounts da
ON da.Accountid = ac.Accountid;
答案 1 :(得分:1)
@veredesmarald已经是正确的了。
这是另一种选择。
SELECT ac.accountid, IsNull(ac.approvaldate, da.datecreated) as 'Approved/Rejected Date'
FROM tblAccount ac
JOIN tblDeclinedAccounts da
ON da.Accountid = ac.Accountid;
答案 2 :(得分:0)
您可以使用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