在SQL中使用XML时如何使用Where子句?

How to use Where clause when using XML in SQL?

我需要在我的查询中使用 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);

如果没有 DDL,很难 re-create 这个,但是您可以通过 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%''