Можете ли вы попробовать это? Это жестко закодированный подход:
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
или что-нибудь еще)