2011-11-19 3 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

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

+0

Gosh, это так странно :(Я воссоздал таблицы и выполнил мой код (минус вставка), и выбор вернул его желаемый результат ... Затем я запустил вставку, и она сработала, и когда я сделал выбор снова, ничего больше не вернулось так как ранее был вставлен ряд «байка» в среду :( – Nonym

+0

Perfect. Большое спасибо: ¬) – hoakey

Смежные вопросы