2016-06-12 3 views
0

私は5つのテーブルを持つデータベースを持っています。 3つのテーブルが接続されています。SQL Serverテーブルから動的なマルチレベルXMLファイルを生成

すべてのデータがマージされる1つのテーブルを作成します。このテーブルには、レベルnrを保持する列GroupLevelがあります。各レベルは、その後のより低いレベルを保持する。

ProductID ProductLanguageID ProductDefaultShopID ProductNumber ProductName ProductPrice 
    [email protected]@SHOP1 LANG2   SHOP1     100101   AAA   159,61 
    [email protected]@SHOP1 LANG2   SHOP1     100102   BBB   159,61 
    [email protected]@SHOP1 LANG2   SHOP1     100105   CCC   159,61 

目はグループがあります:

GroupID   GroupLanguageID  GroupName GroupNumber 
[email protected]@SHOP1 LANG2    ABC  1 
[email protected]@SHOP1 LANG2    BCD 1.01 
[email protected]@SHOP1 LANG2    CDE 1.02 
[email protected]@SHOP1 LANG2    DEF 1.03 

第三の言語

LanguageID LanguageCode2 LanguageName LanguageNativeName 
LANG1   En   English   English 
LANG2   De   German   Deutsch 

私も持っているグループ1は、私のテーブルの最初の製品が含まれているグループ2

を保持しています別のテーブルに接続していない2つのテーブル:

グループ関係表

GroupRelationsGroupID GroupRelationsParentID 
[email protected]@SHOP1   [email protected]@SHOP1 
[email protected]@SHOP1   [email protected]@SHOP1 
[email protected]@SHOP1   [email protected]@SHOP1 

グループ製品のリレーション表

GroupProductRelationGroupID GroupProductRelationProductID 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 
[email protected]@SHOP1     [email protected]@SHOP1 

私は、すべてのデータがマージされて一つのテーブルを作成しました。このテーブルには、レベルnrを保持する列GroupLevelがあります。各レベルは、その後のより低いレベルを保持する。グループ1は

GroupLevel GroupID GroupLanguageID GroupName GroupNumber ParentGroupID GroupProductRelationGroupID GroupProductRelationProductID ProductID ProductLanguageID ProductNumber ProductName ProductPrice 
1  [email protected]@SHOP1 LANG2   ABC 1   NULL   NULL     NULL       NULL   NULL    NULL   NULL   NULL 
2  [email protected]@SHOP1 LANG2   BCD 1.01   [email protected]@SHOP1  [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    457163  ProductName 299,81 
2  [email protected]@SHOP1 LANG2   BCD 1.01   [email protected]@SHOP1  [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    457162  ProductName 163,14 
2  [email protected]@SHOP1 LANG2   DEF 1.03   [email protected]@SHOP1  [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    159151  ProductName 10 
2  [email protected]@SHOP1 LANG2   DEF 1.03   [email protected]@SHOP1  [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    159150  ProductName 10 
2  [email protected]@SHOP1 LANG2   DEF 1.02   [email protected]@SHOP1  [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    159122  ProductName 309,35 
3  [email protected]@SHOP1 LANG2   GGG 1.13   [email protected]@SHOP1 [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1LANG2    3459652 ProductName 309,35 
4  [email protected]@SHOP1 LANG2   BBB 1.14   [email protected]@SHOP1 [email protected]@SHOP1    [email protected]@SHOP1    [email protected]@SHOP1 LANG2    564326  ProductName 309,35       

私の質問は、三番目の後のレベルのすべての項目がにマージされ、最大3つのレベル、との動的なXMLファイルを作成する方法である(付属への)第三の下の表のように、グループ2を保持していますレベル。私はまた、これらのレベルの各項目(3番目にマージされた項目)には、元々どのレベルに属しているかを示す属性が必要です。たとえば、5つのレベルと4と5のレベルが3のレベルにマージされた場合、レベル4のすべてのアイテムには、「レベル4以前」とレベル5の「レベル5」のタグが必要です。これは、そこにいくつのレベルがあるかに関係なく動作するはずです。

私は、コードを作成したが、

SELECT lvl1.GroupName AS groupName, lvl1.GroupNumber 
     ,(
      SELECT prod1.ProductName AS itemName 
      ,prod1.ProductNumber AS itemNumber, 
      prod1.ProductPrice AS itemPrice, 
      prod1.GroupID, 
      prod1.GroupName      
      FROM #tmpFullResult AS prod1 
      WHERE prod1.GroupLevel=1 
      AND prod1.GroupID=lvl1.GroupID    
      FOR XML PATH('product'),ROOT('products'),TYPE 
       ) 
       ,( 

     SELECT lvl2.GroupName AS groupName, lvl2.GroupNumber 
      ,(

    SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber 
      ,prod.ProductPrice AS itemPrice 
    FROM #tmpFullResult AS prod 
    WHERE prod.ProductID IS NOT NULL 
     AND prod.GroupLevel=2 
     AND prod.ProductID=lvl2.ProductID 
     AND prod.GroupID=lvl2.GroupID 
     FOR XML PATH('product'),ROOT('products'),TYPE 
     )      
     FROM #tmpFullResult AS lvl2 
     WHERE lvl2.GroupLevel=2 
     AND lvl2.ParentGroupID=lvl1.GroupID 
     group by lvl2.GroupName , lvl2.GroupNumber,lvl2.GroupID, lvl2.ProductID 
     FOR XML PATH('productGroup2'),TYPE 
     )   
FROM #tmpFullResult AS lvl1 
WHERE lvl1.ParentGroupID IS NULL 
group by lvl1.GroupName , lvl1.GroupNumber,lvl1.GroupID, lvl1.ProductID 
FOR XML PATH('productgroup1'),ROOT('root') 

GO 

私が行う必要がある方法の例を、必要に応じてそれは動作しません。この例のようにXMLで

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
(

SELECT lvl1.GroupName AS groupName 
     ,(
       SELECT prod1.ProductName, prod1.ProductNumber AS itemNumber 
       ,prod1.ProductPrice AS itemPrice 
       FROM tmpFullResultInDesign AS prod1 
       WHERE prod1.ProductID IS NOT NULL 
       AND prod1.GroupLevel=1 
       AND prod1.ProductID=lvl1.ProductID 
       AND prod1.GroupID=lvl1.GroupID 


       FOR XML PATH('productLevel_1'),ROOT('products'),TYPE 
       ) 
       ,( 
SELECT lvl2.GroupName AS 'GroupName' 
       ,(
       SELECT prod2.ProductName AS ProductName ,prod2.ProductNumber AS itemNumber 
       ,prod2.ProductPrice AS itemPrice, prod2.GroupID 
       FROM tmpFullResultInDesign AS prod2 
       WHERE prod2.ProductID IS NOT NULL 
       AND prod2.GroupLevel=2 
       AND prod2.ProductID=lvl2.ProductID 
       AND prod2.GroupID=lvl2.GroupID 
       order by groupName 
       FOR XML PATH('productLevel_2'),ROOT('products'),TYPE 
       ) 
       ,(
SELECT lvl3.GroupName AS groupName 
       ,(
       SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber 
       ,prod.ProductPrice AS itemPrice  
       FROM tmpFullResultInDesign AS prod 
       WHERE prod.ProductID IS NOT NULL 
       AND prod.GroupLevel=3 
       AND prod.ProductID= lvl3.ProductID 
       AND prod.GroupID=lvl3.GroupID 
       FOR XML PATH('productLevel_3'),ROOT('products'),TYPE 
       )    
       ,(

       SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber 
       ,prod.ProductPrice AS itemPrice 
       FROM tmpFullResultInDesign AS prod 
       WHERE prod.ProductID IS NOT NULL 
       AND prod.GroupLevel=3 
       FOR XML PATH('productLevel_previously_level_4'),ROOT('products'),TYPE 
       ) 

,(

       SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber 
       ,prod.ProductPrice AS itemPrice 
       FROM tmpFullResultInDesign AS prod 
       WHERE prod.ProductID IS NOT NULL 
       AND prod.GroupLevel=5 
       FOR XML PATH('productLevel_previously_level_5'),ROOT('products'),TYPE 
       ) 

FROM tmpFullResultInDesign AS lvl3 
WHERE lvl3.GroupLevel=3 
AND lvl3.ParentGroupID=lvl2.GroupID 
FOR XML PATH('productGroup3'),TYPE, ELEMENTS 
       )  
FROM tmpFullResultInDesign AS lvl2 
WHERE lvl2.GroupLevel=2 
AND lvl2.ParentGroupID=lvl1.GroupID 
order by lvl2.GroupName 
FOR XML PATH('productGroup2'),TYPE, ELEMENTS 
       )  
FROM tmpFullResultInDesign AS lvl1 
WHERE lvl1.ParentGroupID IS NULL 
order by GroupNumber 
FOR XML PATH('productGroup1'),ROOT('root') 
) 

出力:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
     <productGroup1> 
       <groupName>Kosmetik</groupName> 
       <productGroup2> 
        <GroupName>Face</GroupName> 
        <products> 
          <productLevel_2 id="Product1"> 
            <ProductName>AAAAA!</ProductName> 
            <itemNumber>457162</itemNumber> 
            <itemPrice>1.02</itemPrice> 
            <GroupID>[email protected]@SHOP1</GroupID> 
           </productLevel_2> 
          <productLevel_2 id="Product2"> 
            <ProductName>BBBBB!</ProductName> 
            <itemNumber>43434234</itemNumber> 
            <itemPrice>134.3434</itemPrice> 
            <GroupID>[email protected]@SHOP1</GroupID> 
           </productLevel_2> 
         </products> 
        <productGroup3> 
          <groupName>FFFFFFF</groupName> 
          <products> 
            <productLevel_3 id="Product1"> 
              <itemNumber>[email protected]</itemNumber> 
              <itemPrice>1.230000000000000e+002</itemPrice> 
             </productLevel_3> 
           </products> 
          <products> 
            <productLevel_previously_level_4 id="Product1"> 
              <itemNumber>23234545</itemNumber> 
              <itemPrice>34.676</itemPrice> 
             </productLevel_previously_level_4> 
            <productLevel_previously_level_4 id="Product2"> 
              <itemNumber>23234545</itemNumber> 
              <itemPrice>34.676</itemPrice> 
             </productLevel_previously_level_4> 
           </products> 
         </productGroup3> 
       </productGroup2> 
      </productGroup1> 
    </root> 

質問説明: 私は仕事が必要ですi番目のレベル(すなわち、レベルn + 1はレベルnになるはずです)。私はいくつかのレベルでの製品を持っている ...もう一度説明しよう:私はレベル1を選択した場合

level 1 + products 
level 2 + products 
level 3 + products ... 
level n + products. 

アイデアがある、1(すなわち2、3、4よりもレベルからのすべての製品に大きな... n)はレベル1に集約されます:

<productGroup1 GroupID="[email protected]@SHOP1"> 
     <GroupName>AAA</GroupName> 
     <GroupLevel>1</GroupLevel> 
     <products> 
       <product> 
        <ProductName>CCC</ProductName> 
       </product> 
      </products> 
     <products> 
       <product> 
        <ProductName>Mem</ProductName> 
       </product> 
      </products> 
    </productGroup1> 

私が選択した場合は、レベル2、レベル1はそのままで、レベルからすべての製品大きなより2(すなわち3、4 ... n)はレベル2 に集約されていますすべてのレベルで同じことが行われます(制限はありません)。

CTEをストアドプロシージャに入れることはできますか?

+0

「マージされた」XMLのサンプルを提供できますか? – Alex

答えて

1

私はあなたの「私が行う必要がある方法の例」と置き換えレベル4とレベルこれで5クエリを取っている:上記、予告で

-- Levels 3+ 
SELECT prod.ProductName AS '@id', prod.GroupLevel AS '@PreviousGroupLevel', prod.ProductNumber AS itemNumber, 
    prod.ProductPrice AS itemPrice 
FROM #tmpFullResult AS prod 
WHERE prod.ProductID IS NOT NULL 
    AND prod.GroupLevel>= 3 
--FOR XML PATH('productLevel_previously_level_4'),ROOT('products'),TYPE 
FOR XML PATH('productLevel_HigherLevels'),ROOT('products'),TYPE 

、私は属性を使用していました「@ PreviousGroupLevel "に変更し、XML PATHを" productLevel_HigherLevels "に変更しました。
全体的なクエリは、(それが#tmpFullResultテーブルが必要です)以下である:

SELECT lvl1.GroupName AS groupName, 
    (
     SELECT prod1.ProductName, prod1.ProductNumber AS itemNumber 
      ,prod1.ProductPrice AS itemPrice 
     FROM #tmpFullResult AS prod1 
     WHERE prod1.ProductID IS NOT NULL 
      AND prod1.GroupLevel = 1 
      AND prod1.ProductID = lvl1.ProductID 
      AND prod1.GroupID = lvl1.GroupID 
     FOR XML PATH('productLevel_1'),ROOT('products'),TYPE 
    ), 
    ( 
     SELECT lvl2.GroupName AS 'GroupName', 
      (
       SELECT prod2.ProductName AS ProductName ,prod2.ProductNumber AS itemNumber, 
        prod2.ProductPrice AS itemPrice, prod2.GroupID 
       FROM #tmpFullResult AS prod2 
       WHERE prod2.ProductID IS NOT NULL 
        AND prod2.GroupLevel=2 
        AND prod2.ProductID=lvl2.ProductID 
        AND prod2.GroupID=lvl2.GroupID 
       ORDER BY groupName 
       FOR XML PATH('productLevel_2'),ROOT('products'),TYPE 
      ), 
      (
       SELECT lvl3.GroupName AS groupName 
        ,(
         SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice  
         FROM #tmpFullResult AS prod 
         WHERE prod.ProductID IS NOT NULL 
          AND prod.GroupLevel = 3 
          AND prod.ProductID = lvl3.ProductID 
          AND prod.GroupID = lvl3.GroupID 
         FOR XML PATH('productLevel_3'),ROOT('products'),TYPE 
        )    
        ,(
         -- Levels 3+ 
         SELECT prod.ProductName AS '@id', prod.GroupLevel AS '@PreviousGroupLevel', prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice 
         FROM #tmpFullResult AS prod 
         WHERE prod.ProductID IS NOT NULL 
          AND prod.GroupLevel>= 3 
         --FOR XML PATH('productLevel_previously_level_4'),ROOT('products'),TYPE 
         FOR XML PATH('productLevel_HigherLevels'),ROOT('products'),TYPE 
        )/*, 
        (
         SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice 
         FROM #tmpFullResult AS prod 
         WHERE prod.ProductID IS NOT NULL 
          AND prod.GroupLevel=5 
         FOR XML PATH('productLevel_previously_level_5'),ROOT('products'),TYPE 
        )*/ 
       FROM #tmpFullResult AS lvl3 
       WHERE lvl3.GroupLevel=3 
       AND lvl3.ParentGroupID=lvl2.GroupID 
       FOR XML PATH('productGroup3'),TYPE, ELEMENTS 
      )  
     FROM #tmpFullResult AS lvl2 
     WHERE lvl2.GroupLevel=2 
     AND lvl2.ParentGroupID=lvl1.GroupID 
     order by lvl2.GroupName 
     FOR XML PATH('productGroup2'),TYPE, ELEMENTS 
    )  
FROM #tmpFullResult AS lvl1 
WHERE lvl1.ParentGroupID IS NULL 
order by GroupNumber 
FOR XML PATH('productGroup1'),ROOT('root') 

私は、これはあなたが探しているものです願っています。

更新: サンプルデータ:クエリ以下

CREATE TABLE #tmpFullResult(GroupLevel INT, GroupID VARCHAR(20) NULL, 
    GroupLanguageID VARCHAR(20) NULL, GroupName VARCHAR(20) NULL, 
    GroupNumber DECIMAL(10, 3) NULL, ParentGroupID VARCHAR(20) NULL, 
    GroupProductRelationGroupID VARCHAR(20) NULL, 
    GroupProductRelationProductID VARCHAR(20) NULL, 
    ProductID VARCHAR(20) NULL, ProductLanguageID VARCHAR(10) NULL, 
    ProductNumber INT NULL, ProductName VARCHAR(20) NULL, ProductPrice DECIMAL(20, 4) NULL) 

INSERT INTO #tmpFullResult 
VALUES 
(1, '[email protected]@SHOP1', 'LANG2', 'ABC', 1, NULL,   NULL,   NULL,   NULL,   NULL, NULL,  NULL,   NULL), 
(2, '[email protected]@SHOP1', 'LANG2', 'BCD', 1.01, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 457163,  'ProductName', 299.81), 
(2, '[email protected]@SHOP1', 'LANG2', 'BCD', 1.01, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 457162,  'ProductName', 163.14), 
(2, '[email protected]@SHOP1', 'LANG2', 'DEF', 1.03, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 159151,  'ProductName', 10), 
(2, '1[email protected]@SHOP1', 'LANG2', 'DEF', 1.03, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 159150,  'ProductName', 10), 
(2, '[email protected]@SHOP1', 'LANG2', 'DEF', 1.02, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 159122,  'ProductName', 309.35), 
(3, '[email protected]@SHOP1', 'LANG2', 'GGG', 1.13, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1','[email protected]@SHOP1','LANG2', 3459652, 'ProductName', 309.35), 
(4, '[email protected]@SHOP1', 'LANG2', 'BBB', 1.14, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 564326,  'ProductName', 309.35), 
(5, '[email protected]@SHOP1', 'LANG2', 'BBB', 1.14, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 564326,  'ProductName', 309.35), 
(3, '[email protected]@SHOP1', 'LANG2', 'GGG', 1.13, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1','[email protected]@SHOP1','LANG2', 3459652, 'ProductName', 309.35), 
(4, '[email protected]@SHOP1', 'LANG2', 'BBB', 1.14, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 564326,  'ProductName', 309.35), 
(5, '[email protected]@SHOP1', 'LANG2', 'BBB', 1.14, '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', '[email protected]@SHOP1', 'LANG2', 564326,  'ProductName', 309.35) 

私はすべての上位レベルのグループのためにGroupLevel 3 PARENTIDを計算するCTEを追加したことを除いて、上記のものと同様である:

;WITH productLevel_HigherLevels(GroupLevel, GroupID, GroupLanguageID, GroupName, GroupNumber, ParentGroupID, 
     GroupProductRelationGroupID, GroupProductRelationProductID, ProductID, ProductLanguageID, 
     ProductNumber, ProductName, ProductPrice) 
AS 
-- Define the CTE query. 
( 
    SELECT GroupLevel, GroupID, GroupLanguageID, GroupName, GroupNumber, ParentGroupID, 
     GroupProductRelationGroupID, GroupProductRelationProductID, ProductID, ProductLanguageID, 
     ProductNumber, ProductName, ProductPrice 
    FROM #tmpFullResult 
    WHERE GroupLevel = 4 AND ProductID IS NOT NULL 
    UNION ALL 
    SELECT HigherLevel.GroupLevel, HigherLevel.GroupID, HigherLevel.GroupLanguageID, HigherLevel.GroupName, HigherLevel.GroupNumber, LowerLevel.ParentGroupID, 
     HigherLevel.GroupProductRelationGroupID, HigherLevel.GroupProductRelationProductID, HigherLevel.ProductID, HigherLevel.ProductLanguageID, 
     HigherLevel.ProductNumber, HigherLevel.ProductName, HigherLevel.ProductPrice 
    FROM productLevel_HigherLevels AS LowerLevel 
     INNER JOIN #tmpFullResult AS HigherLevel 
       ON HigherLevel.ProductID IS NOT NULL 
        AND LowerLevel.GroupLevel + 1 = HigherLevel.GroupLevel 
        AND HigherLevel.ParentGroupID = LowerLevel.GroupID 
) 
SELECT lvl1.GroupName AS groupName, 
    (
     SELECT prod1.ProductName, prod1.ProductNumber AS itemNumber 
      ,prod1.ProductPrice AS itemPrice 
     FROM #tmpFullResult AS prod1 
     WHERE prod1.ProductID IS NOT NULL 
      AND prod1.GroupLevel = 1 
      AND prod1.ProductID = lvl1.ProductID 
      AND prod1.GroupID = lvl1.GroupID 
     FOR XML PATH('productLevel_1'),ROOT('products'),TYPE 
    ), 
    ( 
     SELECT lvl2.GroupName AS 'GroupName', 
      (
       SELECT prod2.ProductName AS ProductName ,prod2.ProductNumber AS itemNumber, 
        prod2.ProductPrice AS itemPrice, prod2.GroupID 
       FROM #tmpFullResult AS prod2 
       WHERE prod2.ProductID IS NOT NULL 
        AND prod2.GroupLevel=2 
        AND prod2.ProductID=lvl2.ProductID 
        AND prod2.GroupID=lvl2.GroupID 
       ORDER BY groupName 
       FOR XML PATH('productLevel_2'),ROOT('products'),TYPE 
      ), 
      (
       SELECT lvl3.GroupName AS groupName 
        ,(
         SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice  
         FROM #tmpFullResult AS prod 
         WHERE prod.ProductID IS NOT NULL 
          AND prod.GroupLevel = 3 
          AND prod.ProductID = lvl3.ProductID 
          AND prod.GroupID = lvl3.GroupID 

         FOR XML PATH('productLevel_3'),ROOT('products'),TYPE 
        )    
        ,(
         SELECT prod.ProductName AS '@id', prod.GroupLevel AS '@PreviousGroupLevel', prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice 
         FROM productLevel_HigherLevels AS prod 
         WHERE prod.ParentGroupID = lvl3.GroupID 
         --FOR XML PATH('productLevel_previously_level_4'),ROOT('products'),TYPE 
         FOR XML PATH('productLevel_HigherLevels'),ROOT('products'),TYPE 
        )/*, 
        (
         SELECT prod.ProductName AS '@id' ,prod.ProductNumber AS itemNumber, 
          prod.ProductPrice AS itemPrice 
         FROM #tmpFullResult AS prod 
         WHERE prod.ProductID IS NOT NULL 
          AND prod.GroupLevel=5 
         FOR XML PATH('productLevel_previously_level_5'),ROOT('products'),TYPE 
        )*/ 
       FROM #tmpFullResult AS lvl3 
       WHERE lvl3.GroupLevel=3 
       AND lvl3.ParentGroupID=lvl2.GroupID 
       FOR XML PATH('productGroup3'),TYPE, ELEMENTS 
      )  
     FROM #tmpFullResult AS lvl2 
     WHERE lvl2.GroupLevel=2 
     AND lvl2.ParentGroupID=lvl1.GroupID 
     order by lvl2.GroupName 
     FOR XML PATH('productGroup2'),TYPE, ELEMENTS 
    )  
FROM #tmpFullResult AS lvl1 
WHERE lvl1.ParentGroupID IS NULL 
order by GroupNumber 
FOR XML PATH('productGroup1'),ROOT('root') 
+0

こんにちは、あなたの答えをありがとう! 3 +レベルのソリューションの問題点は、すべての製品(レベル3+)が各製品グループで繰り返されることです(3つの製品グループの第2レベルがあるが、レベル3の製品を1つのみ含む製品グループ+すべての製品グループが間違っています。) - Anton Tredder 6時間前 –

+0

@Anton Tredder、私は私の答えを更新しました。 – Alex

+0

こんにちは@Alex、私は非常に残念ですが、コードはまだ私が必要とするように実際には動作していません。あなたのコード提案は素晴らしいですが、レベル4(レベル4はレベル3になります)まで動作しますが、nレベル(レベルn + 1はレベルnに移動する必要があります)で作業する必要があります。私はもう一度説明しようとする...私はいくつかのレベルで製品を持っている場合:レベル1製品レベル2製品レベル3製品...レベルn製品....私は私の質問を更新しました。 –

関連する問題