2016-04-18 11 views
0

私はテーブルを持っています。引数aTableには、以下のレコードを持っています重複キーのSQLクエリの挿入と更新

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

と更新、重複キー:他のテーブルにこれらの結果を生成するために、SQL Serverクエリについて

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

方法。主キーはいいえ、名前です

+1

なぜ2つの列PK?十分ではない(別名など)か? – jarlh

+1

[前の質問に表示されているように、なぜマージステートメントを使用しないのですか?(http://stackoverflow.com/a/36678294/3094533) –

+0

こんにちはvivienne!この質問はまだ開いていますか?さらに助けが必要ですか? SOの回答を得ているほとんどの専門家が評判の点で飢えているという事実にご注意ください。 [これを読んでください:誰かの回答](http://stackoverflow.com/help/someone-answers)。どうも! – Shnugo

答えて

1

どのような場合でも新しい列kのみを使用して、新しいテーブル内のテーブルとまったく同じデータを生成したいですか?その後

SELECT *,0 AS k 
INTO TheNewTable 
FROM YourTable; 

SELECT * FROM TheNewTable; 

でそれを試してみるしかし - 正直に言うと - これは非常に奇妙に思える...

0

はこのお試しください:主キーがある

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

をユニークなので、それを複製することはできません。それとも、あなたの論理キーは、例えば、名前、日付のための他の組み合わせがあり、給与は、例のクエリは、このようなことができます:

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; 

または単純なビューへ:

SELECT Name, Date, Salary, CASE WHEN Count(*) > 1 THEN 1 ELSE 0 END as K 
FROM aTable 
GROUP BY Name, Date, Salary 
関連する問題