如何在动态列中使用where语句

时间:2013-10-08 06:44:41

标签: sql-server where

我需要在动态列中创建一个'where'语句。

动态列来自行项目。 样品如下。

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

@paramList = [item1],[item2],[item3]

使用以下查询我需要在结尾处包含where语句。但是@paramlist中的列应该都只等于1。

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

1 个答案:

答案 0 :(得分: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;';