Выполнить запрос в соответствии с условиями присоединения к SQL Server - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу получить данные из таблицы [DL_TRN]. Если запись не присутствует в этой таблице, то я хочу получить подробности из другой таблицы [D_Loan], То же условие для таблицы [FL_TRN] и [F_LOAN]. Я упомянул только две таблицы ссуд (ссуды по запросу и ссуды на фестивале), но у меня есть выполнить работу с несколькими типами ссудных таблиц в одном запросе. Я пытался

SELECT 
    m.[CODE], m.[NAME], d.[M_CODE], f.[M_CODE]
FROM 
    [MsumCOOP].[dbo].[MEMBER] m
FULL OUTER JOIN 
    (IF (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN]  
         WHERE [M_CODE] = 6162) > 0
      (SELECT [M_CODE] 
       FROM [MsumCOOP].[dbo].[DL_TRN] 
       WHERE [LOAN_COMP] IS NULL)
    ELSE
       (SELECT [M_CODE] FROM [MsumCOOP].[dbo].[D_Loan] 
        WHERE [LOAN_COMP] IS NULL)) d ON m.[CODE] = d.[M_CODE]
FULL OUTER JOIN 
    (IF (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[FL_TRN]  
         WHERE [M_CODE] = 6162) > 0
        (SELECT [M_CODE] FROM [MsumCOOP].[dbo].[FL_TRN] 
         WHERE [LOAN_COMP] IS NULL)
     ELSE
        (SELECT [M_CODE] FROM [MsumCOOP].[dbo].[F_Loan] 
         WHERE [LOAN_COMP] IS NULL)) f ON m.[CODE] = f.[M_CODE]
WHERE 
    m.code = 6162

Но я получаю эту ошибку:

Сообщение 156, Уровень 15, Состояние 1, Строка 3
Неверный синтаксис рядом с ключевым словом 'IF'.

Сообщение 102, Уровень 15, Состояние 1, Строка 7
Неверный синтаксис рядом с ')'.

Пожалуйста, предложите решение. Заранее спасибо.

1 Ответ

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

Попробуйте использовать следующее

SELECT m.[CODE],m.[NAME],d.[OP_AMT]
FROM [MsumCOOP].[dbo].[MEMBER] m
FULL OUTER JOIN
  (
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[DL_TRN] WHERE [LOAN_COMP] IS NULL AND (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN]  WHERE [M_CODE]=6162)>0
    UNION ALL
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[D_Loan] WHERE [LOAN_COMP] IS NULL AND (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN]  WHERE [M_CODE]=6162)=0
  ) d
ON m.[CODE]=d.[M_CODE]
FULL OUTER JOIN
  (
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[FL_TRN] WHERE [LOAN_COMP] IS NULL AND (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[FL_TRN]  WHERE [M_CODE]=6162)>0
    UNION ALL
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[F_Loan] WHERE [LOAN_COMP] IS NULL AND (SELECT COUNT(*) FROM [MsumCOOP].[dbo].[FL_TRN]  WHERE [M_CODE]=6162)=0
  ) f
ON m.[CODE]=f.[M_CODE]
WHERE m.code=6162

И попробуйте использовать переменные

DECLARE @code int
SET @code=6162

DECLARE @count1 int
SET @count1=(SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN]  WHERE [M_CODE]=@code)

DECLARE @count2 int
SET @count2=(SELECT COUNT(*) FROM [MsumCOOP].[dbo].[FL_TRN]  WHERE [M_CODE]=@code)

SELECT m.[CODE],m.[NAME],d.[OP_AMT]
FROM [MsumCOOP].[dbo].[MEMBER] m
FULL OUTER JOIN
  (
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[DL_TRN] WHERE [LOAN_COMP] IS NULL AND @count1>0
    UNION ALL
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[D_Loan] WHERE [LOAN_COMP] IS NULL AND @count1=0
  ) d
ON m.[CODE]=d.[M_CODE]
FULL OUTER JOIN
  (
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[FL_TRN] WHERE [LOAN_COMP] IS NULL AND @count2>0
    UNION ALL
    SELECT [M_CODE] FROM [MsumCOOP].[dbo].[F_Loan] WHERE [LOAN_COMP] IS NULL AND @count2=0
  ) f
ON m.[CODE]=f.[M_CODE]
WHERE m.code=@code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...