SQL-запросы в выражении Case - PullRequest
1 голос
/ 25 мая 2011

У меня есть таблица с именем tblAccount, где у меня есть два столбца:

  1. Дата создания
  2. AccountApprovalDate

DateCreated - дата создания учетной записи, а AccountApprovalDate - дата утверждения учетной записи.

Мне нужно создать столбец с именем «AccountApproval / RejectDate». Здесь дата отклонения является производным значением. Этот столбец может иметь только дату подтверждения или отклонения. Когда AccountApprovalDate не является нулевым, тогда значение то же самое. и когда дата отклонения не равна нулю, нам нужно выбрать столбец 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 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Это должен быть подзапрос.

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Почему это должен быть подзапрос?Просто присоединитесь и используйте 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 голос
/ 25 мая 2011

@ veredesmarald уже правильно.

Вот альтернатива.

SELECT ac.accountid, IsNull(ac.approvaldate, da.datecreated) as 'Approved/Rejected Date'
FROM tblAccount ac
JOIN tblDeclinedAccounts da
ON da.Accountid = ac.Accountid;
0 голосов
/ 25 мая 2011

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...