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