【问题标题】:How to use Where clause when using XML in SQL?在 SQL 中使用 XML 时如何使用 Where 子句?
【发布时间】:2019-07-18 16:25:48
【问题描述】:

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

【问题讨论】:

    标签: sql-server xml tsql dynamic-sql


    【解决方案1】:

    如果没有 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%''
    

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多