2011-11-19 38 views
0

我有一個表,有三列:Day,Key,Value。如果從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

我w螞蟻能夠選擇那個價值。所以我想看看哪些日子不包括自行車,然後將它添加到那些日子。 – hoakey

+0

所以你事先不知道價值?用戶交互/決策意味着至少有兩個查詢 - 一個查看列表,另一個查詢實現更改。 –

回答

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

完美。非常感謝:¬) – hoakey

相關問題