2013-11-24 3 views
-1

내 테이블 구조는 다음과 같다 :SQL Server는

<Date date = "01/01/2005"> <Id dealId=50000" value="5"/> <Id dealId=50001" value="8"/> </Date> <Date date = "01/01/2006"> <Id dealId=50000" value="6"/> <Id dealId=50001" value="9"/> </Date> 

그것을 :

date    Id  Value 
    -------------------------------- 
    01/01/2005 50000  5    
    01/01/2006 50000  6 
    01/01/2007 50000  7 
    01/01/2005 50001  8 
    01/01/2006 50001  9 
    01/01/2007 50001  10 

I 출력 다음과 같은 형식으로 SQL 서버에 for xml를 사용하여 XML을 싶습니다 누군가가 SQL Server에서 쿼리를 도와 주면 큰 도움이 될 것입니다. 나는 그 (것)들의 2 개를 나 자신 시도했다 그러나 정확한 산출을 얻고 있지 않다. 나는 그런 간단한 XML 변환을 필요로하는 경우

+2

시도한 것을 보여줘야합니다. 이는 시도한 것을 보여 주며, 사람들의 학습에 도움이되는 코드의 잘못된 위치를 설명하는 더 나은 대답을 줄 수 있습니다. –

답변

2
-- using your provided values: 
DECLARE @table TABLE ([date] DATE, id INT, value INT); 
INSERT @Table VALUES ('01/01/2005',50000,5); 
INSERT @Table VALUES ('01/01/2006',50000,6); 
INSERT @Table VALUES ('01/01/2007',50000,7); 
INSERT @Table VALUES ('01/01/2005',50001,8); 
INSERT @Table VALUES ('01/01/2006',50001,9); 
INSERT @Table VALUES ('01/01/2007',50001,10); 

-- XML Query 
-- the outer query groups by date, ensuring each date only shows up once 
SELECT 
    [date] AS '@date', 
    (
     -- The inner query selects all Ids for each date found in the outer query 
     SELECT id as '@dealId', 
       value as '@value' 
     FROM @Table B 
     WHERE B.date=A.date -- join on date from outer query 
     FOR XML PATH ('Id'), TYPE 
    ) 
FROM @Table A 
GROUP BY date 
FOR XML PATH ('Date'); 

-- Produces:  
<Date date="2005-01-01"> 
    <Id dealId="50000" value="5"/> 
    <Id dealId="50001" value="8"/> 
</Date> 
<Date date="2006-01-01"> 
    <Id dealId="50000" value="6"/> 
    <Id dealId="50001" value="9"/> 
</Date> 
<Date date="2007-01-01"> 
    <Id dealId="50000" value="7"/> 
    <Id dealId="50001" value="10"/> 
</Date> 
+0

도움을 주셔서 감사합니다. – andy

+0

이 답변으로 문제가 해결되었다고 생각되면 녹색 확인 표시를 클릭하여 '수락'으로 표시하십시오. – laylarenee

0

일반적으로, 나는 for xml raw을 사용하고 있습니다 :

select 
    t1.[date], 
    (
     select 
      t2.[Id] as dealId, t2.[Value] 
     from Table1 as t2 
     where t2.[date] = t1.[date] 
     for xml raw('Id'), type 
    ) 
from Table1 as t1 
group by t1.[date] 
for xml raw('Date') 

---------------------- 
<Date date="2005-01-01"> 
    <Id dealId="50000" Value="5"/> 
    <Id dealId="50001" Value="8"/> 
</Date> 
<Date date="2006-01-01"> 
    <Id dealId="50000" Value="6"/> 
    <Id dealId="50001" Value="9"/> 
</Date> 
<Date date="2007-01-01"> 
    <Id dealId="50000" Value="7"/> 
    <Id dealId="50001" Value="10"/> 
</Date> 

하면 sql fiddle demo

일부 노트에 직접보십시오 :

  • for xml raw은 기본적으로 특성 중심이기 때문에 열 이름에 @을 사용할 필요가 없습니다.
  • 하위 쿼리이 필요합니다. 중첩 된 xml을 원하기 때문에 지금은 유일한 방법입니다.
  • 내부 데이터를 xml로 가져 오려면 서브 쿼리에서 type 수정 자도 사용해야합니다.
+0

도움에 감사드립니다. – andy