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 (상위) 아래에서 다른 값으로 이동했습니다. 그때까지 순서대로 그 열을 기준으로 정렬 한 후 "번호"

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을 발견 좋아요,하지만 (그냥 때문에 트릭을 할 것 같다 '호기심이 많은 분) : 왜'EXPLICIT' a * must *입니까? – Shnugo