2011-11-19 13 views
0

私は3列のテーブル:Day,KeyValueを持っています。 Key列を欠席値があれば、私はそれを挿入することができるようにしたい:列に値が入っていないテーブルに行を挿入してください

DAY | KEY | VALUE 
------------------ 
Mon Run 50  
Mon Bike 20 
Tues Run 25 
Tues Bike 60 
Wed Run 20 
Wed Swim 5 

私は、カラムから失わ「バイク」の値を持つ行を特定し、それを挿入することができるようにしたいです。したがって、追加行があります

Wed Bike 20 

これを達成するにはどうすればよいですか?

+0

は、水泳もフラグを立てされなければならない - 月&火のために、右? –

+0

I wその値を選ぶことができます。だから私は、どの日に自転車が含まれていないかを見て、その日にそれを加えます。 – hoakey

+0

あなたはあらかじめこの値を知っていませんか?ユーザー対話/判断とは、少なくとも2つのクエリを意味します.1つはリストを表示し、2つ目は変更を実装します。 –

答えて

1

お試しください。これは、ハードコード化されたアプローチです:

INSERT INTO <yourtable> (day, key, value) 
SELECT DISTINCT t1.day AS day, 'Bike' as key, 20 as value 
FROM 
    <yourtable> AS t1 
    LEFT OUTER JOIN 
    (SELECT day, key FROM <yourtable> WHERE key='Bike') AS t2 
    ON t1.day = t2.day 
WHERE t2.key IS NULL; 

それとも、あなたが活動して値を選択することができますストアドプロシージャ(使用してくださいすることができた場合:

CREATE PROCEDURE dbo.InsertActivityWhereMissing 
     @activity VARCHAR(50) 
    , @activityValue INT 
AS 
BEGIN 
    INSERT INTO <yourtable> (day, key, value) 
    SELECT t1.day AS day, @activity as key, @activityValue as value 
    FROM 
     (SELECT day FROM <yourtable> GROUP BY day) AS t1 
     LEFT OUTER JOIN 
     (SELECT day, key FROM <yourtable> WHERE key = @activity) AS t2 
     ON t1.day = t2.day 
    WHERE t2.key IS NULL; 
END 

をこのように、あなたは同じことを行うことができますロジックにより、特定の"activity"のアクション(私はちょうどそのように命名していますが、私はRunBikeSwimまたは何か他のものに言及しています)

+0

ああ、それはとても奇妙だ:(私はテーブルを作り直してコードを実行して(インサートを差し引いた)、選択が彼の望む結果を返した。そして、インサートを走らせて、それが働いた。水曜日の「自転車」の列が以前に挿入されていたので:( – Nonym

+0

パーフェクト。ありがとうso much:¬) – hoakey

関連する問題