我需要一些XML查询帮助 我想知道如何将多行数据合并为一行 对于我的问题:(当前查询)
SELECT
Name = Paravalue.value('Name[1]', 'VARCHAR(250)'),
Value = Paravalue.value('Value[1]', 'VARCHAR(250)')
FROM (
SELECT CONVERT(XML,Parameters) as ParameterXML FROM ReportServer.dbo.Subscriptions WHERE SubscriptionID = 'Test'
) a
CROSS APPLY ParameterXML.nodes('/ParameterValues/ParameterValue') p ( Paravalue )
结果:
Name Value
1 IncludeNotSubmitted True
2 EndDate NULL
3 StartDate NULL
我想要的结果是:
Parameter Values
1 IncludeNotSubmitted: True EndDate: NULL StartDate: NULL
任何人都可以指出我正确的方向吗?
2009年1月编辑: 错过了包含实际的XML
<ParameterValues>
<ParameterValue>
<Name>IncludeNotSubmitted</Name>
<Value>True</Value>
</ParameterValue>
<ParameterValue>
<Name>EndDate</Name>
</ParameterValue>
<ParameterValue>
<Name>StartDate</Name
</ParameterValue>
</ParameterValues>
答案 0 :(得分:0)
您是否尝试在单个查询中完成此操作?如果没有,您可以将xml查询的结果插入到表值变量中,然后使用表值变量的所有行填充变量,如下所示:
--make a table valued variable
declare @sample table (
Id int identity(1,1),
Name varchar(50),
Value varchar(50)
)
--put some test data in it
--here you would select using you xml query from your post
insert @sample (Name, Value)
select 'IncludeNotSubmitted', 'True'
union all
select 'EndDate', null
union all
select 'StartDate', null
--we're going to store the combined values in this variable
declare @combinedString varchar(max) = ''
select @combinedString = @combinedString + Name + ':' + isnull(Value, 'NULL') + ' '
from @sample
select @combinedString
--results:
-- IncludeNotSubmitted:True EndDate:NULL StartDate:NULL
答案 1 :(得分:0)
您可以使用公用表表达式和 FOR XML PATH 在单个查询中解决此问题:
;WITH cte AS
(
SELECT
Name = Paravalue.value('@Name[1]', 'VARCHAR(250)'),
Value = Paravalue.value('@Value[1]', 'VARCHAR(250)'),
SubscriptionID
FROM (
SELECT CONVERT(XML,[Parameters]) as ParameterXML, SubscriptionID FROM ReportServer.dbo.Subscriptions WHERE SubscriptionID = 'Test'
) a
CROSS APPLY ParameterXML.nodes('/ParameterValues/ParameterValue') p ( Paravalue )
)
SELECT STUFF((select ', ' + Name + ': ' + value as [text()]
FROM cte xt
WHERE xt.SubscriptionID = t.SubscriptionID
FOR XML PATH('')), 1, 2, '')
FROM cte t
GROUP BY SubscriptionID
我假设参数字段中的XML数据如下所示:
<ParameterValues>
<ParameterValue Name="IncludeNotSubmitted" Value="True" />
<ParameterValue Name="StartDate" Value="null" />
<ParameterValue Name="EndDate" Value="null" />
</ParameterValues>