2017-12-08 3 views
0

入れ子になったXML要素の一番下に「頻度」の行を1つ含めるとします。現時点では、私のコードは返信セクションの外側に周波数行を置いています。私はこれを一番下に一本の線として表示したいと思います。私はほぼそこにある以下のコードを持っています。現在の出力と所望の出力も表示されます。SQLを使用してXMLでネストされた要素の一番下に一行を追加

SELECT 
    (SELECT 
    'USD' AS 'Currency', 
    'TestDatabase' AS 'Datasource', 
    'Test Name' AS 'Name', 
      (SELECT 
      ValueDate AS 'Date', 
      ReturnValue AS 'ROR' 
      FROM FactReturn [Value] 
      WHERE [Value].AssetId = asset.AssetId 
      FOR XML AUTO,TYPE, ROOT('Returns')), 
    'Daily' AS 'Frequency' 
    FROM DimAsset Asset 
    FOR XML AUTO, ELEMENTS, TYPE, ROOT('Assets')) 
FOR XML PATH('Body'),ROOT('ASPackage') 

結果:私は適切なサンプルでいくつかの最小限のテーブルを提供するために、あなたを尋ね

Desired Result

+0

投稿クエリが無効です...これを編集し、いくつかのインデントを追加して、サブ選択を視覚的にグループ化してください。最小化されたテーブルと適切なサンプルデータを持つ*完全スタンドアロン*のサンプルを作成してみてください。 – Shnugo

+0

そして、使用している実際のデータベース製品にタグを付けてください(私はそれが '[sql-server]'だと仮定します)。 – Shnugo

+0

こんにちはShnugo、助けてくれてありがとう - クエリが更新されました –

答えて

0

Current Result

望ましい結果データ。私はモックアップオブジェクトは、次の時間あなたの仕事であるべきでテストシナリオを設定するためにやった...

このようにそれを試してみてください。

DECLARE @DimAssetMockup TABLE(AssetID INT,AssesName VARCHAR(100)); 
INSERT INTO @DimAssetMockup VALUES(1,'Asset 1'),(2,'Asset 2'); 

DECLARE @FactReturnMockup TABLE(AssetID INT,ValueDate DATETIME, ReturnValue DECIMAL(12,10)) 
INSERT INTO @FactReturnMockup VALUES(1,{d'2017-01-01'},0.11) 
            ,(1,{d'2017-01-02'},0.12) 
            ,(2,{d'2017-02-01'},0.21) 
            ,(2,{d'2017-02-02'},0.22); 

SELECT 
(
    SELECT 'USD' AS 'Currency' 
      ,'TestDatabase' AS 'Datasource' 
      ,AssesName AS [Name] 
      ,(
      SELECT [Value].ValueDate AS [@Date] 
        ,[Value].ReturnValue as [@ROR] 
      FROM @FactReturnMockup AS [Value] 
      WHERE [Value].AssetID=Asset.AssetID 
      FOR XML PATH('Value'),TYPE 
      ) AS [Returns] 
      ,'Daily' AS [Returns/Frequency] 
    FROM @DimAssetMockup Asset 
    FOR XML PATH('Asset'),ROOT('Assets'),TYPE 
) 
FOR XML PATH('Body'),ROOT('ASPackage'); 

結果を

<ASPackage> 
    <Body> 
    <Assets> 
     <Asset> 
     <Currency>USD</Currency> 
     <Datasource>TestDatabase</Datasource> 
     <Name>Asset 1</Name> 
     <Returns> 
      <Value Date="2017-01-01T00:00:00" ROR="0.1100000000" /> 
      <Value Date="2017-01-02T00:00:00" ROR="0.1200000000" /> 
      <Frequency>Daily</Frequency> 
     </Returns> 
     </Asset> 
     <Asset> 
     <Currency>USD</Currency> 
     <Datasource>TestDatabase</Datasource> 
     <Name>Asset 2</Name> 
     <Returns> 
      <Value Date="2017-02-01T00:00:00" ROR="0.2100000000" /> 
      <Value Date="2017-02-02T00:00:00" ROR="0.2200000000" /> 
      <Frequency>Daily</Frequency> 
     </Returns> 
     </Asset> 
    </Assets> 
    </Body> 
</ASPackage> 
関連する問題