2010-12-29 9 views
1

mit Ich habe drei Tabellen TelNo, RefNo und Ref_Check_No. RefNo und Ref_Check_No hat Spalten Telephone_Id und ENTITY_ID jeweils zusammen mit anderen Spalten, während TelNo hat Telephone_Id und ENTITY_ID. Was ich tun möchte, ist, alle Datensätze von Ref_Check_No in die RefNo Tabelle einzufügen. Die TelNo Tabelle enthält die Telephone_Id für jede Entity_Id. Alle genannten Spalten sind nicht eindeutig.Erhöhungsschritte nicht eindeutiges Feld eine SQL-Anweisung INSERT

Die Sache ist, ich weiß, wie Sie die Daten aus der Ref_Check_No Tabelle einfügen. Jedoch kann ich nicht scheinen Telephone_Id Werte für jede Entity_Id einfügen. Was würde Ich mag zu tun ist, die MAX Telephone_Id Anzahl pro ENTITY_ID vom TelNo Tabelle abzurufen und um 1 für jede ENTITY_ID in der RefNo Tabelle erhöht ein Insert-Anweisung. Unten ist ein Beispiel dafür, was Ich mag in der RefNo Tabelle erreichen wäre:

   **TelNo Table**     **RefNo Table** 
     Telephone_Id Entity_Id  Telephone_Id Entity_Id 
      1   ABCD    4    ABCD 
      2   ABCD    5    ABCD 
      3   ABCD    6    ABCD 
      89  EFGH    7    ABCD 
      90   EFGH    96    EFGH 
      95   EFGH    97    EFGH 

Grundsätzlich ich tun, was will, ist die MAX Telephone_Id Anzahl pro ENTITY_ID (ABCD und EFGH) zu finden, von die TelNo Tabelle und erhöhen sie um 1 für jede entsprechende Entity_Id in der RefNo Tabelle.

Unten ist der Code, an dem ich gearbeitet habe, den ich nicht richtig erscheinen kann.

INSERT INTO 
RefNo 
(
Telephone_Id, 
Entity_ID, 
ContactName 
) 
SELECT  
    (SELECT COUNT(*) FROM Ref_Check_No b WHERE(a.Entity_Id = b.Entity_Id) 
    ISNULL ((SELECT MAX(Telephone_Id) AS Telephone_Id FROM TelNo 
    WHERE (Entity_Id = a.Entity_Id)), 0) AS Telephone_Id, 

Entity_ID, 
ContactName    
FROM   
Ref_Check_No 

Gibt es eine Möglichkeit, die MAX Telephone_Id Nummer zu finden und es für jeden ENTITY_ID um 1 erhöht eine korrelierte Unterabfrage mit, während die Daten in der RefNo zugleich Tabelle einfügen?

+1

Welche Datenbank und Version? –

Antwort

0

Ich habe Schwierigkeiten, Ihr Beispiel zu verstehen. Sie möchten in RefNo für jeden Datensatz in Ref_Check_No eine Zeile anlegen, die jeweils die gleiche Entity_ID und eine steigende Telephone_ID hat?

Wenn das der Fall ist, versuchen Sie dies (für MSSQL):

INSERT INTO RefNo (Entity_ID, Telephone_ID)  
SELECT r.Entity_ID, 
    t.MAXID + ROW_NUMBER() OVER(Partition BY r.Entity_ID order by r.Telephone_ID) AS Telephone_ID 
FROM ref_check_no r 
    INNER JOIN (
    SELECT Entity_ID, Max(Telephone_ID) as MaxID 
    FROM TelNo 
     GROUP BY Entity_ID) t 
    ON r.Entity_ID=t.Entity_ID 
+0

Was ich tun möchte, ist, alle DISTINCT Zeilen und Spalten aus der Ref_Check_No Tabelle einzufügen, jede mit der gleichen Entity_ID zu kennzeichnen und Telephone_ID zu erhöhen. Ich habe "order by r.Telephone_ID" durch "order by t.MAXID" ersetzt, um es zum Laufen zu bringen.Der Code hat dann funktioniert und die Telephone_ID für jede Entity_ID erhöht. Wie kann ich jedoch denselben Code verwenden, um alle anderen Spalten in RefNo einzufügen? Mit anderen Worten, ich möchte eine Insert-Anweisung, die alle unterschiedlichen Datensätze und Spalten zusammen mit dem Inkrementieren der Telephone_ID einfügt. Die zwei anderen Spalten, die aus Ref_Check_No eingefügt werden, sind FName und SName – Peterson

Verwandte Themen