2016-11-24 34 views
1

我有一個SQL xml導出,它爲我提供了3個字段的值,導出沒有問題。問題的3個領域被稱爲日,夜和週末 - 我試圖實現的是,如果只有一個值在一天的領域,並沒有在其他兩個,然後我只想出口一天字段,完全省略夜晚&週末田野。如果輸入了夜間速率,那麼我想導出白天和夜晚的字段,如果有周末字段輸入,那麼我想導出所有3個字段。SQL xml導出幫助 - 基於其他字段的值導出字段

是否有可能在單個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

+2

歡迎來到SO。如果包含樣本數據和預期的輸出,這使得我們更容易幫助您。看一看[這裏](http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056)和[這裏](http: //stackoverflow.com/help/mcve)。兩個頁面都包含一些很棒的提示如果你遵循這些,我相信答案會來。 –

回答

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