2016-04-18 8 views
0

Ich habe aTable. aTable hat folgende Datensätze:SQL-Abfrage einfügen und aktualisieren auf doppelte Schlüssel

+----+------+------------------+--------+ 
    | No | Name | Date(mm/dd/yyyy) | Salary | 
    +----+------+------------------+--------+ 
    | 1 | Ed | 04/01/2016 | 1000 | 
    | 2 | Tom | 04/02/2016 | 1500 | 
    +----+------+------------------+--------+ 

Wie über die SQL Server-Abfrage der Ergebnisse auf andere Tabelle zu erzeugen:

+----+------+------------------+--------+---+ 
| No | Name | Date(yyyy/mm/dd) | Salary | k | 
+----+------+------------------+--------+---+ 
| 1 | Ed | 04/01/2016 | 1000 | 0 | 
| 2 | Tom | 04/02/2016 | 1500 | 0 | 
+----+------+------------------+--------+---+ 

und zu aktualisieren, wenn doppelte Schlüssel. Der Primärschlüssel ist Nein und Name

+1

Warum eine zweispaltige pk? Ist nicht genug (d. H. Verschieden)? – jarlh

+1

warum verwenden Sie die Merge-Anweisung nicht, wie ich Ihnen in einer gezeigt haben [vorherige Frage?] (Http://stackoverflow.com/a/36678294/3094533) –

+0

Hallo vivienne! Ist diese Frage noch offen? Brauchen Sie weitere Hilfe? Bitte beachten Sie, dass die meisten Experten, die auf SO antworten, nach Reputationspunkten hungern. [Bitte lesen Sie: jemand-Antworten] (http://stackoverflow.com/help/someone-answers). Danke! – Shnugo

Antwort

1

Sie genau in einer neuen Tabelle mit einer neuen Spalte k nur die gleichen Daten wie Ihre Tabelle produzieren wollen, die „0“ in jedem Fall ist?

SELECT *,0 AS k 
INTO TheNewTable 
FROM YourTable; 

Dann ist es versuchen, mit

SELECT * FROM TheNewTable; 

Aber - um ehrlich zu sein - das ist ziemlich seltsam scheint ...

0

Try this:

Insert into second_table_name(No, Name, Date, Salary, k) 
    select 
     No, Name, Date, Salary, 0 
    from aTable 
0

Der Primärschlüssel ist EINZIGARTIG, damit Sie es nicht duplizieren können. Oder vielleicht Ihre logischen Schlüssel ist eine andere Kombination zum Beispiel Name, Datum, Gehalt dann könnte zB Abfrage wie folgt sein:

MERGE aNewTable as Target 
USING 
(
    SELECT Name, Date, Salary, CASE WHEN Count(*) > 1 THEN 1 ELSE 0 END as K 
    FROM aTable 
    GROUP BY Name, Date, Salary 
) as Source ON Source.Name=Target.Name AND Source.Date=Target.Date AND Source.Salary=Target.Salary 
WHEN NOT MATCHED THEN 
    INSERT (Name, Date, Salary, K) 
    VALUES (Source.Name, Source.Date, Source.Salary, Source.K) 
WHEN MATCHED THEN 
    UPDATE 
    SET K = Source.K 
WHEN NOT MATCHED BY SOURCE THEN 
    DELETE; 

oder einfach Ansicht:

SELECT Name, Date, Salary, CASE WHEN Count(*) > 1 THEN 1 ELSE 0 END as K 
FROM aTable 
GROUP BY Name, Date, Salary 
Verwandte Themen