在连接时使用case语句按条件执行查询

时间:2018-04-24 13:28:49

标签: sql sql-server sql-server-2008

我正在使用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 :(得分:0)

您不能在CASE表达式的THEN子句中放置一个返回多个列的子查询。

我知道这是更多的代码,但是如果您这样编写代码,您的代码将实际执行更快

IF @FCount>0
     SELECT ... {query that joins to DL_TRN}
ELSE
     SELECT ... {query that joins to D_LOAN}
END