我有一个小问题
@CMD nvarchar (MAX)=''
SELECT @CMD +=N'
SELECT
COUNT(CASE WHEN RFRD.QueuTypeID=4
THEN RFRD.QueuTypeID
END) RequiredaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID=3
THEN RFRD.QueuTypeID
END) BhinaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4)
,COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+''' ,''*'')A'
FROM #cte RF
p.s - From不在动态之中。
这里工作正常......
但是当我添加IF
声明时:
SELECT
COUNT(CASE WHEN RFRD.QueuTypeID=4
THEN RFRD.QueuTypeID
END) RequiredaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID=3
THEN RFRD.QueuTypeID
END) BhinaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4)'
**IF @MyParam IS NOT NULL**
SET @CMD+='
,COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+''' ,''*'')A'
FROM #cte RF
该计划并不了解RF
的含义。
它没有看到FROM #cte
RF Anymore。
任何人都知道IF
陈述的问题是什么?
感谢
答案 0 :(得分:1)
然后不要使用if
。使用case
:
@CMD nvarchar (MAX)=''
SELECT @CMD +=N'
SELECT
COUNT(CASE WHEN RFRD.QueuTypeID=4
THEN RFRD.QueuTypeID
END) as RequiredaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID=3
THEN RFRD.QueuTypeID
END) as BhinaQueue
,COUNT(CASE WHEN RFRD.QueuTypeID NOT IN (3,4) '
(case when @MyParem is not null then ',COUNT(DISTINCT RFRD.LeadDocumentID)AS Repeat,CONCAT('''+RF+''' ,''*'')A'
else ''
end) + '
FROM #cte RF ';
所有代码都在select
语句中,因此case
是适当的结构,而不是if
。