【发布时间】:2020-05-19 19:57:29
【问题描述】:
我有两张表t1,t2 如下:
t1
[date] col1 col3 col4
13-05-2020 xyz ttx 1
16-05-2020 xyz abc 5
15-05-2019 xyz abc 2
11-05-2019 xyz ttx 3
19-05-2020 xyx abc 4
t2
[date] col1
14-05-2019 ttx
18-05-2020 abc
19-05-2020 abc
我正在尝试将t2 记录与t1 表匹配。如果匹配,则应返回匹配的记录。
如果它不匹配,那么我们需要检查t1 中的先前可用日期并使用匹配日期更新t2。
如果没有匹配的记录或 null 它应该抛出异常。
匹配标准是t2 中的date 和col1 分别对应于t1 中的date 和col3
预期输出
[date] col1
11-05-2019 ttx
16-05-2020 abc
19-05-2020 abc
我正在尝试通过在临时表中获取不匹配的记录,然后循环获取t1 中可用的先前日期,但坚持使用逻辑。任何提示我们如何实现它?
create table #temp(
Id INT IDENTITY(1,1),
[date] DATE,
col1 varchar(3)
)
INSERT INTO #temp
SELECT [date],col1
FROM t2
WHERE [date] NOT IN
(SELECT [date]
FROM t1)
AND col1 NOT IN(SELECT col3
FROM t1)
DECLARE @count INT;
DECLARE @id INT=1;
SELECT @count=COUNT(*) FROM #temp
DECLARE @tempdate DATE;
WHILE (@count >0 )
BEGIN
SELECT @tempdate=date FROM #temp WHERE Id=@id
WHILE --
--logic to get the matched date record
SET @count=@count-1
SET @id=@id+1
END
【问题讨论】:
-
我不清楚您是否需要更新或插入。请说明您想要的结果。
-
@GordonLinoff 实际上,如果匹配,我需要匹配的记录,否则需要更新日期,它与 t1 中的先前日期匹配。更新了预期的输出。
标签: sql sql-server tsql