【发布时间】:2019-05-28 10:45:07
【问题描述】:
我有如下表格:
Input table:
RequestNumber TrackName Date
-----------------------------------------------------------
02209 Middle 2017-05-28 00:00:00
0263 Middle 2017-06-29 00:00:00
0633 Middle 2017-09-10 00:00:00
0762 Back 2017-06-23 00:00:00
0762 Front 2017-06-23 00:00:00
0762 Middle 2017-06-23 00:00:00
01839 Middle 2017-03-09 00:00:00
我需要检查“TrackName”的“RequestNumber”和“Date”是否相同。 如果“RequestNumber”和“Date”的多个reacords匹配,那么我应该将“TrackName”列更新为“All three”,如下所示 输出示例(本例中有 3 条记录匹配)
Output table:
RequestNumber TrackName Date
-----------------------------------------------------------
02209 Middle 2017-05-28 00:00:00
0263 Middle 2017-06-29 00:00:00
0633 Middle 2017-09-10 00:00:00
0762 All three 2017-06-23 00:00:00
01839 Middle 2017-03-09 00:00:00
要获得上述设计的输出,这是我尝试过的 SQL。但是,它会将所有 TrackName 更新为全部三个。
UPDATE a
SET a.[TrackName] = 'All three'
FROM Table1 as a
INNER JOIN
(SELECT [RequestNumber], row_number() OVER (ORDER BY [RequestNumber] DESC) as rowNumber
FROM Table1 ) drRowNumbers ON drRowNumbers.[RequestNumber] = a.[RequestNumber] and drRowNumbers.[Date] = a.[Date]
希望我已经正确解释了这一点。我在做什么?请问有什么问题可以解决吗?
注意:记录是动态的,所以不能硬编码(如果有的话)。
谢谢。
【问题讨论】:
-
您希望 0762 的两个记录都保留在那里,TrackName = 'All three'?还是想同时删除第二行?
-
如果“RequestNumber”和“Date”匹配(如示例所示),则合并所有记录以提供字符串“All three”。因为“TrackName”只有 3 个类别(即 Middle、Back 和 front)。
-
这表示应该删除另外两行吧?
-
是的。但是,输出应该如图所示。
标签: sql-server sql-server-2017