2009-07-29 9 views
0

Ich habe eine einzelne Tabelle in meiner primären DB mit dem Namen tblGlobalIDMapping erstellt, die allen Einträgen eine GUID zuweist und die anderen drei primären IDs in der App speichert, um ein einzelnes ID-Repository bereitzustellen.SQL: Füllen Sie einzelne Zeile (Tabl 1) aus mehreren Zeilen (Tabl 2); Quer DB

Die neue Tabelle wird in der folgenden Struktur ->

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

Die Informationen, ich brauche, sind in einer Tabelle in einem anderen DB (derselbe Server) mit der folgenden Teilstruktur ->

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

Eine Person (ID # 13579) ist in der zweiten Tabelle 1 für jede Anwendung dargestellt. Die ApplicationID-Spalte speichert eine Nummer, 1 für DRIMaster und 6 für DRIClient, die Ihnen sagt, was die ID # in PersonApplicationID ist.

Ich muss eine Bulk Copy/Insert aus dieser Tabelle in meine neue Tabelle tun, aber ich möchte nur 1 Zeile die 3 wichtigsten IDs in der neuen Tabelle aufzeichnen.

Dies ist, was ich bisher habe, aber das gibt eine Zeile für jede PersonID zurück.

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) 

Dies gibt die unten ->

PersonID DRIMaster DRIClient 
_______________________________ 
108574 71163  NULL 
108574 NULL  71163 

Antwort

2

Aggregates ignorieren NULL-Werte, so ....

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

Dies scheint zu funktionieren. Ich bin ein wenig besorgt, dass eine DISTINCT PersonID Abfrage 51241 zurückgibt und diese Abfrage gibt 51233 zurück und ich kann die fehlenden 8 PersonIDs derzeit nicht erklären. –

+1

Sie filtern nach ApplicationId In (1,6). Ist es möglich, dass die 8 fehlenden Personen nicht diese beiden Anwendungs-IDs haben? –

+0

Das war mein ursprünglicher Gedanke, aber die folgende Abfrage -> 'SELECT DISTINCT PersonID VON tblApplicationAssociation WHERE ApplicationID NICHT IN (1,6)' gibt 13253 Datensätze .... Ich bin ratlos! –

Verwandte Themen