Вставить строку в таблицу, где значение не в столбце - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть таблица с тремя столбцами: 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

Я хочу иметь возможность идентифицировать строку с отсутствующим значением 'Bike' из столбца и вставить ее. Так что будет дополнительный ряд

Wed Bike 20

Как мне добиться этого?

1 Ответ

1 голос
/ 19 ноября 2011

Можете ли вы попробовать это? Это жестко закодированный подход:

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" (я просто называю его таким образом, но я имею в виду Run, Bike, Swim или что-нибудь еще)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...