SQL xml导出帮助 - 根据其他字段的值导出字段

时间:2016-11-24 09:49:36

标签: sql-server xml

我有一个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

1 个答案:

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