当第一列出现多次时,更新第二列的最小值

时间:2014-01-08 16:58:31

标签: sql-server

enter image description here我正在努力解决如何一步到位的问题。

我的列的值在1到+ -20之间变化。与此相关的是第二个值,通常介于1和5之间。

我想要做的是当数字1值出现超过一次然后我需要将第2列中的值更新为99但只是第2列中的最高数字。

我添加了一张图片以便更好地解释。 基本上id是唯一的,如果值1出现的次数更多,那么我需要更新值2,其中值2中的值是最高值。

1 个答案:

答案 0 :(得分:0)

您可以使用row_number()查找No2值最高的行,然后使用count() over()检查No1是否存在多行值。

SQL Fiddle

MS SQL Server 2008架构设置

create table YourTable
(
  No1 int,
  No2 int
);

insert into YourTable values
(1, 3),
(1, 2),
(2, 1);

查询1

with C as
(
  select No2,
         row_number() over(partition by No1 order by No2 desc) as rn,
         count(*) over(partition by No1) as c
  from YourTable
)
update C
set No2 = 99
where rn = 1 and
      c > 1

<强> Results

查询2

select *
from YourTable

<强> Results

| NO1 | NO2 |
|-----|-----|
|   1 |  99 |
|   1 |   2 |
|   2 |   1 |