2009-07-29 7 views
0

プライマリDBにtblGlobalIDMappingと呼ばれる単一のテーブルを作成しました。このテーブルはすべてのエントリにGUIDを割り当て、他の3つのプライマリIDをアプリケーション全体に格納して1つのIDリポジトリを提供します。SQL:複数の行から1行(tbl1)を読み込みます(tbl2)。クロスDB

新しい表は、以下の構造である - >

AppGlobalID  uniqueidentifier  NoNulls 
PersonID  int     NoNulls 
DRIMaster  int     Nulls 
DRIClient  int     Nulls 

I必要な情報は、以下の部分構造を有する異なるDB(同じサーバー)に表にされる - >

PersonID    int    NoNulls 
ApplicationID   tinyint   NoNulls 
PersonApplicationID  varchar(14)  NoNulls 

人物(ID#13579)は、アプリケーションごとに2番目の表1に表示されます。 ApplicationID列には、DRIMasterの場合は1、DRIClientの場合は6が格納され、PersonApplicationIDのID番号が何であるかを示します。

このテーブルから新しいテーブルに一括コピー/挿入する必要がありますが、新しいテーブルに3つのメインIDを記録する行が1つだけ必要です。

これはこれまでの説明ですが、これは各PersonIDの行を返します。

SELECT PersonID, 
    CASE 
     WHEN ApplicationID = 1 
     THEN PersonApplicationID 
    END AS 'DRIMaster', 
    CASE 
     WHEN ApplicationID = 6 
     THEN PersonApplicationID 
    END AS 'DRIClient' 
FROM tblApplicationAssociation 
WHERE ApplicationID IN (1,6) 

これは、以下を返します - >

PersonID DRIMaster DRIClient 
_______________________________ 
108574 71163  NULL 
108574 NULL  71163 

答えて

2

集計は、これが動作しているよう

SELECT PersonID, 
     Min(CASE 
       WHEN ApplicationID = 1 
       THEN PersonApplicationID 
     END) AS 'DRIMaster', 
     Min(CASE 
       WHEN ApplicationID = 6 
       THEN PersonApplicationID 
     END) AS 'DRIClient' 
FROM tblApplicationAssociation 
WHERE ApplicationID IN (1,6) 
Group By PersonId 
+0

ヌルを無視し、そう......。私は、DISTINCT PersonIDクエリが51241を返し、このクエリが51233を返し、現在、8個のPersonIDが不足していると説明できないことを少し心配しています。 –

+1

ApplicationId In(1,6)でフィルタリングしています。紛失した8人に2つのアプリケーションIDがない可能性はありますか? –

+0

それは私の元々の思想でしたが、次のクエリ - > 'DISTINCTを選択PersonID FROM tblApplicationAssociation どこApplicationID NOT IN(1,6)' 13253レコードを返します....私は困惑しています! –

関連する問題