2

バックグラウンド テーブル データ:

memberid sponsorid mailfirstname maillastname
1000     NULL      Foo           Chu
1001     1000      Foo1          Chu1
1002     1001      Foo2          Chu2
1003     1002      Foo3          Chu3
1004     1003      Foo4          Chu4

以下のスクリプトは、私が現在参加しているメンバーを出力します。しかし、同時にそのメンバーのスポンサー情報も出力したいと考えています。だから、現在私は得る:

Level memberid sponsorid mailfirstname maillastname
0     1000     NULL      Foo           Chu
...
2     1004     1003      Foo4          Chu4

しかし、1004 メンバーの場合は、スポンサーも必要です。

Level memberid sponsorid mailfirstname maillastname sponsorfname sponsorlname
2     1004     1003      Foo4          Chu4         Foo3         Chu3

クエリ:

WITH Heirarchy
AS
(
   SELECT 
      CONVERT( INT , 0 ) [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname
   FROM
      members T1
   WHERE
      T1.memberid = 20000283

   UNION ALL

   SELECT 
      CONVERT( INT , ( TH.[Level] + 1 ) ) [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname
   FROM
      members T1
   INNER JOIN 
      Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT * 
FROM Heirarchy 
ORDER BY level, maillastname
4

1 に答える 1

0

それはあなたを助けるはずです

以下のスクリプトでは、すべてのメンバーとそのスポンサーを取得します

WITH Heirarchy
AS
(
   SELECT 
      0 AS [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname,
      T1.mailfirstname AS sponsorfname,
      T1.maillastname AS sponsorlname
   FROM
      members T1
   WHERE
      T1.sponsorid IS NULL
   UNION ALL
   SELECT
      TH.[Level] + 1 AS [Level],
      T1.memberid,
      T1.sponsorid,
      T1.mailfirstname,
      T1.maillastname,
      TH.mailfirstname,
      TH.maillastname
   FROM
      members T1
   INNER JOIN 
      Heirarchy TH ON TH.memberid = T1.sponsorid
)
SELECT * 
FROM Heirarchy
ORDER BY level, maillastname

SQLFiddle のデモ

于 2012-11-25T21:41:33.390 に答える