我正在使用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(在连接部分的子查询中)但不能选择多个列,则上面的查询工作正常。
请指导我进行此查询。
答案 0 :(得分:0)
您不能在CASE表达式的THEN子句中放置一个返回多个列的子查询。
我知道这是更多的代码,但是如果您这样编写代码,您的代码将实际执行更快:
IF @FCount>0
SELECT ... {query that joins to DL_TRN}
ELSE
SELECT ... {query that joins to D_LOAN}
END