3

同様のデータのセットを作成し、リンクされたキーに関連付けるにはどうすればよいですか。

以下の例は、生データと目的の出力がどのように生成されるかを示しています。

DECLARE @Data TABLE (PID INT, CID INT)

INSERT INTO @Data
VALUES (1, 1), (1, 2), (1, 3), (3, 1), (3, 2), (3, 3), (2, 1), (2, 2), (4, 3), (4, 4),  
       (5, 4), (5, 5), (8, 4), (8, 5), (6, 6), (7, 4), (7, 5), (7, 6)

上記のデータでは、1、2、3 の CID セットは 1、2 とは異なります。これらは固有のセットです。

関連付けたい

PID 1 と 3 をセット 1、2、3 に。

PID 2 からセット 1、2

PID 4 からセット 3、4

PID 5 および 8 からセット 4、5

全体的な目標は、次のような XML を返すことです。

<Items>
  <Item>
    <Hierarchies>
        <Hierarchy>
           <CID>1</CID>
           <CID>2</CID>
           <CID>3</CID>
        </Hierarchy>
    </Hierarchies>
    <PIDs>
        <PID>1</PID>
        <PID>3</PID>
    </PIDs>
  </Item>
  <Item>
    <Hierarchies>
        <Hierarchy>
           <CID>1</CID>
           <CID>2</CID>
        </Hierarchy>
    </Hierarchies>
    <PIDs>
        <PID>2</PID>
    </PIDs>
  </Item>
  <Item>
    <Hierarchies>
        <Hierarchy>
           <CID>3</CID>
           <CID>4</CID>
        </Hierarchy>
    </Hierarchies>
    <PIDs>
        <PID>4</PID>
    </PIDs>
  </Item>
  <Item>
      ... Etc ...
  </Item>
<Items>
4

1 に答える 1

4

このようなもの?または私は誤解しましたか?

    DECLARE @Data TABLE (PID INT, CID INT)

    INSERT INTO @Data
    VALUES (1, 1), (1, 2), (1, 3), (3, 1), (3, 2), (3, 3), (2, 1), (2, 2), (4, 3), (4, 4),  
           (5, 4), (5, 5), (8, 4), (8, 5), (6, 6), (7, 4), (7, 5), (7, 6)

    with cid_xml as (   select P.PID
                               ,OA.CID
                        from @Data P
                        outer apply (select CAST((select C.CID 
                                                     from @Data C
                                                  where C.PID = P.PID

                                                  for xml path('')) as varchar(max)) as CID 
                                    ) OA
                    )
    select cast((select cast(C2.CID as xml) as 'hierarchies/hierarchy'
                        ,cast(OA2.PID as xml) as 'PIDs'
                from cid_xml C2
                outer apply (select CAST((select C3.PID 
                                             from cid_xml C3
                                          where C3.CID = C2.CID
                                          group by C3.PID
                                          for xml path('')) as varchar(max)) as PID 
                            )OA2
                group by C2.CID,OA2.PID
                order by LEN(C2.CID) desc
                for xml path('item')) as xml)
    for xml path('Items')

目的の結果のサンプルで行ったように、アイテム/階層/階層の最初のノードを表示するために注文しました

私が得た結果セットは

  <Items>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>1</CID>
          <CID>2</CID>
          <CID>3</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>1</PID>
        <PID>3</PID>
      </PIDs>
    </item>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>4</CID>
          <CID>5</CID>
          <CID>6</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>7</PID>
      </PIDs>
    </item>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>3</CID>
          <CID>4</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>4</PID>
      </PIDs>
    </item>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>4</CID>
          <CID>5</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>5</PID>
        <PID>8</PID>
      </PIDs>
    </item>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>1</CID>
          <CID>2</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>2</PID>
      </PIDs>
    </item>
    <item>
      <hierarchies>
        <hierarchy>
          <CID>6</CID>
        </hierarchy>
      </hierarchies>
      <PIDs>
        <PID>6</PID>
      </PIDs>
    </item>
  </Items>

大丈夫です?

于 2013-01-24T15:41:27.800 に答える