我有一个SQL xml导出,它为我提供了3个字段的值并且导出没有问题。有问题的3个字段被称为日,夜和周末 - 我想要实现的是,如果日期字段中只有一个值而其他两个中没有任何内容那么我只想单独导出日期字段,完全省略夜晚&周末的田野。如果输入了夜间费率,那么我想导出白天和夜晚字段,如果输入了周末字段,那么我想导出所有3个字段。
是否可以在单个select语句中实现此目的?因为我不太确定如何在xml容器中做什么。
这就是我目前在以下所有字段中输出的内容:
(SELECT --Product Item--
'ENERGY' ProductItemReference,
(SELECT --Rates--
(SELECT --Rate--
DAY AS Rate, --Mandatory
'Unrestricted' RateName
FOR XML PATH('Rate'), TYPE),
(SELECT
NIGHT AS Rate,
'Night' RateName
FOR XML PATH('Rate'), TYPE),
(SELECT
WEEKEND AS Rate,
'Evening and Weekend' RateName
FOR XML PATH('Rate'), TYPE)
FOR XML PATH('Rates'), TYPE)
FOR XML PATH('ProductItem'), TYPE)
select语句中的数据可能包含多个帐户,其中一些仅包含日费率,其他帐户包含夜晚和周末。我可以在一个select语句中以正确的格式导出每个帐户吗?
任何建议都将受到赞赏。
由于
DC
答案 0 :(得分:1)
您可以使用case when ... then ... end
选择要导出的费率吗?
在不知道你的数据是什么的情况下(我已经使用了表变量)或者你希望输出看起来像这样的工作会是什么?
declare @srcTable table(dayRate int, nightRate int, weekendRate int);
insert into @srcTable(dayRate, nightRate, weekendRate)
select 451 dayRate, null nightRate, null weekendRate union
select 452 dayRate, 453 nightRate, null weekendRate union
select 454 dayRate, 456 nightRate, 457 weekendRate;
select 'Energy' ProductItemReference,
(
select
(select 'Unrestricted' [@name], dayRate[*] for xml path('Rate'), type),
case when nightRate is not null then (select 'Night' [@name], nightRate [*] for xml path('Rate'), type) end,
case when weekendRate is not null then (select 'Evening and Weekend' [@name], weekendRate [*] for xml path('Rate'), type) end
from @srcTable
for xml path('rates'), type
)
for xml path('ProductItem'), type