Выполнить запрос в соответствии с условием, используя инструкцию case при присоединении - PullRequest
0 голосов
/ 24 апреля 2018

Я использую SQL SERVER 2008. Мой запрос выдаёт мне ошибки. Я хочу получить данные ИЛИ выполнить запрос из таблицы [DL_TRN]. Если записи в этой таблице нет, я хочу получить данные из другой таблицы [D_Loan]. Я использовал запрос:

DECLARE @DCount INTEGER;
SET @FCount=(SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN]  WHERE [M_CODE]=6162 AND ([LOAN_COMP]<>'Y' OR [LOAN_COMP] IS NULL));

SELECT m.[CODE],m.[NAME],d.[OP_AMT]
FROM [MsumCOOP].[dbo].[MEMBER] m
FULL OUTER JOIN ( SELECT CASE WHEN @FCount>0 THEN (SELECT [M_CODE],[OP_AMT] FROM [MsumCOOP].[dbo].[DL_TRN] WHERE [LOAN_COMP]<>'Y' ) 
                    ELSE (SELECT [M_CODE],'F' AS [OP_AMT] FROM [MsumCOOP].[dbo].[D_Loan] WHERE [LOAN_COMP]<>'Y')
                    END
                ) 
                d ON m.[CODE]=d.[M_CODE]
WHERE m.code=6162

Вышеупомянутый запрос работает нормально, если я просто выбрал одно поле, например [M_CODE] или count (в подзапросе при соединении части), но не работает для выбора нескольких столбцов. Пожалуйста, помогите мне сделать этот запрос.

1 Ответ

0 голосов
/ 24 апреля 2018

Вы не можете поместить подзапрос, который возвращает более одного столбца в предложении THEN выражения CASE.

Я знаю, что это больше кода, но ваш код на самом деле будет работать быстрее если вы напишите это так:

IF @FCount>0
     SELECT ... {query that joins to DL_TRN}
ELSE
     SELECT ... {query that joins to D_LOAN}
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...