2017-10-06 9 views
0

別のテーブルの共通の値に基づいて新しいテーブルに複数の行を作成するにはどうすればよいですか?SQL Server - ルックアップ値に基づいて複数の行を作成する必要があります

ProviderTable:          PersonTable: 
--------------------        --------------------- 
ProviderID | GroupID        PersonID | ProviderID 
    1  | A          100 |  1 
    2  | A          101 |  3          
    3  | A          102 |  8 
    4  | NULL         103 |  10 
    5  | B          104 |  5 
    6  | C          105 |  4 
    7  | B 
    8  | NULL 
    9  | NULL 
    10  | C 

ProviderTable.ProviderID = PersonTable.ProviderID

私はProvider.GroupID = Provider.GroupID

結果は、私が探しています各プロバイダの人の列に新しいテーブルを作成する必要が

New-table: 
PersonID | ProviderID 
    100 |  1 
    100 |  2 
    100 |  3 
    101 |  3 
    101 |  1 
    101 |  2 
    102 |  8 
    103 |  10 
    103 |  6 
    104 |  5 
    104 |  7 
    105 |  4 

答えて

1

このクイックバージョンでは、探している並べ替え順がわかります。テストデータが含まれています:

DECLARE @pt table (
    ProviderId int, 
    GroupId varchar(2) 
    ) 

DECLARE @pet table (
    PersonId int, 
    ProviderId int 
    ) 

INSERT INTO @pt Values 
    (1,'A'), 
    (2,'A'), 
    (3,'A'), 
    (4,NULL), 
    (5,'B'), 
    (6,'C'), 
    (7,'B'), 
    (8,NULL), 
    (9,NULL), 
    (10,'C') 

INSERT INTO @pet VALUES 
    (100,1), 
    (101,3), 
    (102,8), 
    (103,10), 
    (104,5), 
    (105,4) 

SELECT pe.PersonId, 
    IsNull(p2.ProviderId, p1.providerId) As ProviderId 
FROM @pt p1 
INNER JOIN @pet pe 
    ON p1.ProviderId = pe.ProviderId 
LEFT JOIN @pt p2 
    ON p1.GroupId = p2.GroupId 
ORDER BY pe.personId, 
    CASE 
     WHEN pe.ProviderId = p2.ProviderId 
      Then 0 
     ELSE 1 
    END 
+0

を!ありがとうございました! – mgraham

0

あなたは、次のSQL文を使用することができます右のソート順ですべてを取得し

SELECT PER.PersonID, COALESCE(PG.ProviderID, PP.ProviderID) AS ProviederID 
    FROM PersonTable PER 
     INNER JOIN ProviderTable PP 
     ON PP.ProviderID = PER.ProviderID 
     LEFT OUTER JOIN ProviderTable PG 
     ON PG.GroupID = PP.GroupID; 
+0

ありがとう!これは動作します!私は合体を考えなかった!よく働く! – mgraham

関連する問題