create table #temp (
user_id [int] NOT NULL,
date [Date] NOT NULL,
typeid [int] NOT NULL,
fieldid [int] NOT NULL,
valueid [int] NOT NULL
);
create table #temp1 (
user_id [int] NOT NULL,
date [Datetime] NOT NULL,
typeid [int] NOT NULL,
fieldid [int] NOT NULL,
valueid [int] NOT NULL
);
insert into #temp values (1,'2020-01-25',9876,12, 1);
insert into #temp values (1,'2020-01-25',9876,13, 1);
insert into #temp1 values (1,'2020-05-20',9876,12, 1); -- same row as compared with excluding date condition so ignore this
insert into #temp1 values (1,'2020-05-20',9876,14, 1);
output can be #temp or in different table
user_id date typeid fieldid valueid
1 2020-01-25 9876 12 1
1 2020-01-25 9876 13 1
1 2020-05-20 9876 14 1 -- new row and the value is 1
1 2020-05-20 9876 13 0 -- fieldid 13 value is 1 and not in #temp1 so added here with value 0
MERGE
#temp AS t
USING
(
SELECT * from #temp1 AS st
) AS s
ON
t.[user_id] = s.[user_id]
AND
t.[typeid] = s.[typeid]
AND
s.fieldid = t.fieldid
AND
s.valueid = t.valueid
WHEN MATCHED THEN
DELETE
WHEN NOT MATCHED BY SOURCE AND t.[valueid] = 1 THEN
UPDATE SET
[user_id] = t.[user_id],
[date] = t.[date], -- here i want to set the date of the source table of other fields
[typeid] = t.[typeid],
[fieldid] = t.[fieldid],
[valueid] = 0
WHEN NOT MATCHED BY TARGET THEN
INSERT([user_id], [date], [typeid], [fieldid], [valueid])
VALUES(s.[user_id], s.[date], s.[typeid], s.[fieldid], [valueid]);
невозможно установить исходную дату других полей для запроса в WHEN NOT MATCHED BY SOURCE. есть ли способ или какой-либо другой подход для получения желаемого результата?
Чтобы эта работа работала, я обновил #temp с датой в # temp1 для данного пользователя.
дайте мне знать, есть ли другой способ получить желаемый результат.
ps. отредактировал этот вопрос, чтобы он оставался простым и понятным