我需要在查询中使用where子句,但无法执行。
我只想要WHERE attrpfd_attr_name LIKE'ABC%'的结果,但是我无法将这部分代码添加到查询中。有什么想法吗?
DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);
SET @cols = STUFF(
(
SELECT DISTINCT
','+QUOTENAME(c.[attrpfd_attr_name])
FROM [dbo].[attrpfd_det] c FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, '')
SET @query = 'SELECT [attrpf_key1], '+@cols+'from (SELECT [attrpf_key1],
[attrpfd_default_value_char] AS [amount],
[attrpfd_attr_name] AS [category]
FROM [dbo].[attrpf_mstr]
INNER JOIN [dbo].[attrpfd_det]
ON attrpf_mstr.oid_attrpf_mstr = attrpfd_det.oid_attrpf_mstr
)x pivot (max(amount) for category in ('+@cols+')) p';
EXECUTE (@query);
答案 0 :(得分:0)
没有DDL,很难重新创建它,但是您可以像这样通过ON子句将过滤器添加到JOIN中:
DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);
SET @cols = STUFF(
(
SELECT DISTINCT
','+QUOTENAME(c.[attrpfd_attr_name])
FROM [dbo].[attrpfd_det] c FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, '')
SET @query = 'SELECT [attrpf_key1], '+@cols+'from (SELECT [attrpf_key1],
[attrpfd_default_value_char] AS [amount],
[attrpfd_attr_name] AS [category]
FROM [dbo].[attrpf_mstr]
INNER JOIN [dbo].[attrpfd_det]
ON attrpf_mstr.oid_attrpf_mstr = attrpfd_det.oid_attrpf_mstr AND attrpfd_attr_name LIKE ''ABC%''
)x pivot (max(amount) for category in ('+@cols+')) p';
请注意,唯一的更改是添加了
INNER JOIN [dbo].[attrpfd_det]
ON attrpf_mstr.oid_attrpf_mstr = attrpfd_det.oid_attrpf_mstr
使用:
AND attrpfd_attr_name LIKE ''ABC%''