0

一時テーブルから構造 xml ドキュメントを作成しようとしています。一時テーブルの形式は次のとおりです。

CREATE TABLE #Temp1 ( Name Char( 30 ), seqid integer, salary int );
INSERT INTO #Temp1 VALUES('DEAL' ,123,6)
INSERT INTO #Temp1 VALUES('DEAL' ,56,6)
INSERT INTO #Temp1 VALUES('TRACNHE' ,1253,56)
INSERT INTO #Temp1 VALUES('TRACNHE' ,5,65)
INSERT INTO #Temp1 VALUES('ASSET' ,56,23)

次の形式で xml 形式を作成しようとしています。

<Response>
<Deal>
 <seqid="123" salary="6" />
 <seqid="56" salary="6" />
<Deal>
<TRACNHE>
 <seqid="1253" salary="56"/>
 <seqid="5" salary="65"/>
</TRACNHE>
<ASSET>
 <seqid="56" salary="23"/>
</ASSET>
</Response>

SELECT Name, (SELECT SEQID FROM #TEMP1 T WHERE T.Name = T1.Name)
FROM (SELECT DISTINCT NAME FROM #TEMP1 ) T1
FOR XML PATH('rEPONSE')
DROP TABLE #Temp1


DROP TABLE #Temp1

上記のクエリを試してみましたが、サブクエリが複数の値を返したと言われています。このクエリに何が欠けているか教えていただけますか。このシナリオを処理するより良い方法はありますか。

前もって感謝します

4

1 に答える 1

0

あなたの要件に基づいて、2種類の複雑さがあることがわかりました

  • グループ化されたアイテムを含む xml を取得しようとしています。
  • <ss seqid="1253" salad= "56"/>の代わりに 適切な名前
    <seqid="1253"。

以下のクエリを調べてください。役立つ場合があります

SELECT 
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'Deal'
      FOR XML PATH('Deal') , TYPE
    )  ,
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'TRACNHE'
      FOR XML PATH('TRACNHE') , TYPE
    )   ,
    (SELECT
        seqid 'ss/@seqid'
       , salary 'ss/@salary'
      FROM Temp1 as t where t.Name = 'ASSET'
      FOR XML PATH('ASSET') , TYPE
    )  
FOR XML PATH(''), ROOT('Response');
于 2015-03-19T02:16:23.843 に答える