2017-02-08 4 views
1

FOR XML EXPLICITを使用してSQLからXML出力を作成しようとしています。ただし、私は別のデータベースを使用しているため、XML EXPLICITでなければなりませんが、この例ではSQL Serverを使用しています。重複する値FOR XML EXPLICIT

質問のために単純なテーブル@テーブルを宣言しました。それは2列(文字、数字)と3行を持っています。テーブル定義:

declare @table table (letter varchar(1), number int); 
insert into @table values ('A',1),('A',2),('A',3) 

私が持っているクエリはこれです:

select 1 as tag, null as parent, 
letter as [letter!1!value], 
null as [number!2] 
from @table 

union all 

select 2 as tag, 1 as parent, 
letter,number 
from @table 
for xml explicit 

これから出力された私は、「手紙」列の値が同じなので、何が起こっている理解し、それ以下:

<letter value="A" /> 
<letter value="A" /> 
<letter value="A"> 
    <number>1</number> 
    <number>2</number> 
    <number>3</number> 
</letter> 

しかし、私は出力が見えるように必要なのはこれです:

<letter value="A"> 
    <number>1</number> 
</letter> 
<letter value="A"> 
    <number>2</number> 
</letter> 
<letter value="A"> 
    <number>3</number> 
</letter> 

これは可能ですか、そうなら、どうですか?

答えて

1

解決策が見つかりました。表の別の列を追加して、TAG 1(親)の下に移動しますが、値は異なります。次に、ORDER BYで、私はその列が発注し、「番号」

declare @table table (letter varchar(1), id int, number int); 
insert into @table values ('A',1,1),('A',2,2),('A',3,3) 


    select 1 as tag, null as parent, 
    letter as [letter!1!value], 
    id as [letter!1!values!hide], 
    null as [number!2] 
    from @table 

    union all 

    select 2 as tag, 1 as parent, 
    letter,id,number 
    from @table 
    order by [letter!1!values!hide],[number!2] 
    for xml explicit 

は:)

+0

あなたは私の側から解決策、1を見つけたことを偉大な、しかし(ただ、Iのでトリックを行うようです'EXPLICIT' a *はなぜ*でなければならないのですか? – Shnugo