2009-07-29 87 views
0

我在主數據庫中創建了一個名爲tblGlobalIDMapping的表,它將爲所有條目分配一個GUID,並將其他3個主ID存儲在應用程序中以提供單個ID存儲庫。SQL:從多行(tbl 2)填充單行(tbl 1);跨數據庫

新表是以下結構 - >

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

我所需要的信息以在不同的DB(同一服務器)具有以下部分結構的表 - >

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

一個人(ID#13579)在每個應用程序的第二個表1中表示。 ApplicationID列存儲一個數字,1表示DRIMaster,6表示DRIClient,它告訴你PersonApplicationID中的ID號是什麼。

我需要從該表執行批量複製/插入到我的新表,但我只需要1行記錄新表中的3個主ID。

這是我到目前爲止,但這返回每個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。 – 2009-07-29 16:10:20