简体   繁体   English

根据加入SQL Server中的条件执行查询

[英]Execute query as per conditions in joining SQL Server

I want to fetch data from the table [DL_TRN]. 我想从表[DL_TRN]中获取数据。 If the record is not present in that table then I want to fetch details from another table [D_Loan], Same condition for [FL_TRN] table and [F_LOAN].I mentioned only two loan tables(Demand Loan and Festival Loan) but I have to do work with multiple types loan tables in the same query.I tried 如果该表中没有该记录,那么我想从另一个表[D_Loan]中获取详细信息,[FL_TRN]表和[F_LOAN]的条件相同。我只提到了两个借贷表(Demand Loan和Festival 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

But I get this error : 但是我得到这个错误:

Msg 156, Level 15, State 1, Line 3 消息156,第15级,州1,第3行
Incorrect syntax near the keyword 'IF'. 关键字“ IF”附近的语法不正确。

Msg 102, Level 15, State 1, Line 7 Msg 102,第15级,状态1,第7行
Incorrect syntax near ')'. ')'附近的语法不正确。

Please suggest a solution. 请提出解决方案。 Thanks in advance. 提前致谢。

Try to use the following 尝试使用以下内容

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

And try to use variables 并尝试使用变量

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM