2011-01-20 17 views
12

私はこのテーブル構造を持っています。 YearPart、MonthPartとDATEPART ...彼らは説明何EXが含まれています。このサンプルデータの使用(それぞれ)2011、1、19SQL "For XML Path" - ネストされた結果

DECLARE @agenda AS TABLE (
    PID INT IDENTITY(1,1) PRIMARY KEY, 
    YearPart int, 
    MonthPart int, 
    DayPart int, 
    lib_title nvarchar(200), 
    [filename] nvarchar(255), 
    meta_value nvarchar(2000) 
) 

:私が欲しいもの

INSERT INTO @agenda VALUES (2010, 12, 4, 'Test Record', '', '') 
INSERT INTO @agenda VALUES (2011, 1, 3, 'Another Record', '', '') 
INSERT INTO @agenda VALUES (2011, 1, 3, 'Fred Birthday', '', '') 
INSERT INTO @agenda VALUES (2011, 1, 4, 'Work Day', '', '') 
INSERT INTO @agenda VALUES (2011, 12, 6, '2nd Test Record', '', '') 

は、のようなXML出力でありますこれは:

<root> 
    <Year Year="2010"> 
    <Month Month="12"> 
     <Day Day="4"> 
     <Item RecordName="Test Record" RecordID="1" /> 
     </Day> 
    </Month> 
    </Year> 
    <Year Year="2011"> 
    <Month Month="1"> 
     <Day Day="3"> 
     <Item RecordName="Another Record" RecordID="2" /> 
     <Item RecordName="Geoffrey Birthday" RecordID="3" /> 
     </Day> 
     <Day Day="4"> 
     <Item RecordName="Work Day" RecordID="4" /> 
     </Day> 
    </Month> 
    <Month Month="12"> 
     <Day Day="6"> 
     <Item RecordName="2nd Test Record" RecordID="5" /> 
     </Day> 
    </Month> 
    </Year> 
</root> 

これまでのところ、私は正しく動作するようにネストを取得することができませんでした。私は通常、グループ化を終了します(たとえば、1つだけにする必要がある場合は、複数のYear = 2011要素を取得します)。

これを行うことができない場合は、私はいつも...

答えて

16

を.NETサイト上のXMLを作成することができますそれは行うことができます。

select 
    a1.YearPart as '@Year', 
    (select MonthPart as '@Month', 
     (select DayPart as '@Day', 
     (select 
      lib_title as '@RecordName', 
      PID as '@RecordID' 
      from @agenda as a4 
      where a4.DayPart = a3.DayPart and 
       a4.MonthPart = a2.MonthPart and 
       a4.YearPart = a1.YearPart 
      for xml path('Item'), type   
     ) 
     from @agenda as a3 
     where a3.YearPart = a1.YearPart and 
      a3.MonthPart = a2.MonthPart 
     group by a3.DayPart 
     for xml path('Day'), type  
    ) 
    from @agenda as a2 
    where a1.YearPart = a2.YearPart 
    group by a2.MonthPart 
    for xml path('Month'), type 
) 
from @agenda as a1 
group by YearPart 
for xml path('Year'), root 
+0

優秀!私は近くにいたことを知っていました...私は私のグループが間違っていた...ありがとうミカエル...私は必要なものを正確に行います。 –

関連する問題