2013-10-08 33 views
0

我需要在動態列中創建'where'語句。如何在動態列中使用Where語句

動態列來自行項目。 樣品如下。

​​

@paramList = [ITEM1],[ITEM2],[項目3]

使用下面的查詢我需要在端部以納入其中的語句。但@參數列中的列應全部等於1。

SET @query ='select no, 
' + @paramList + ' 
FROM(SELECT * FROM #tblitems)src 
PIVOT 
(
max(value) 
for [parameter] in (' + @paramList + ') 
) as piv order by item' 

回答

0

創建以同樣的方式作爲列清單的條件字符串:

SET @condition = STUFF((
SELECT DISTINCT ' AND [' + parameter + '] = 1' 
FROM #tblitems FOR XML PATH('') 
) 
,1,5,''); 

注意,雖然你也可以用它代替手動封閉在方括號中的名字QUOTENAME功能:

SET @condition = STUFF((
SELECT DISTINCT ' AND ' + QUOTENAME(parameter) + ' = 1' 
FROM #tblitems FOR XML PATH('') 
) 
,1,5,''); 

既然已經有條件字符串,可以將其添加到動態查詢中:

SET @query ='SELECT no, 
' + @paramList + ' 
FROM (SELECT * FROM #tblitems) AS src 
PIVOT 
(
    MAX(value) 
    FOR [parameter] IN (' + @paramList + ') 
) AS piv 
WHERE ' + @conditions + ' 
ORDER BY item;'; 
相關問題