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

时间:2019-07-18 16:25:48

标签: sql-server xml tsql dynamic-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);

1 个答案:

答案 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%''