2009-07-29 53 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