0

我需要在动态列中做一个“where”语句。

动态列来自行项目。示例如下。

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

@paramList = [项目1],[项目2],[项目3]

使用下面的查询,我需要在最后加入 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'
4

1 回答 1

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;';
于 2013-10-10T06:43:29.263 回答