我需要在动态列中创建一个'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'
答案 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;';