SQL - 选择所有行并将列值替换为带有标识符的最大列值

标签 sql sql-server sql-server-2008 max

我在 stackoverflow 上查看了有关选择最大值或替换列值的各种答案,但我似乎无法弄清楚如何同时执行这两项操作并返回所有行。基本上我想返回所有行,但如果另一行在同一列和相同标识符中具有更高的数字,则替换给定行中的列的值。

我不是 SQL 专家,这让我摸不着头脑...我希望这可以通过查询来完成,而无需更新数据。也许我需要重新处理数据,但这将是一项巨大的手动任务。也许我可以在 View 中执行此操作?我很感激并愿意接受任何有关如何执行此操作的建议。

下面是正在查询的 View 的示例。 “代码”是公共(public)字段。

+-------+-------+-----------------------------------+   
| type1 | type2 | code | amt |                      |   
+-------+-------+-----------------------------------+  
| 1     | A     | 100  | 59                         |  
| 1     | B     | 200  | 75                         |  
| 2     | C     | 100  | 65   <-- Max for code 100  |  
| 2     | D     | 200  | 80   <-- Max for code 200  |  
| 3     | E     | 100  | 55                         |  
| 3     | F     | 200  | 70                         |  
+-------+-------+-----------------------------------+ 

我需要返回所有行,但如果“代码”相同并且另一行中的数字更高,则将“amt”替换为最大值。这是我正在寻找的输出的示例:

+-------+-------+------------------------------------------------+   
| type1 | type2 | code | amt |                                   |   
+-------+-------+------------------------------------------------+  
| 1     | A     | 100  | 65 <-- replaced w/max for code 100      |  
| 1     | B     | 200  | 80 <-- replaced w/max for code 200      | 
| 2     | C     | 100  | 65                                      |  
| 2     | D     | 200  | 80                                      |  
| 3     | E     | 100  | 65 <-- replaced w/max for code 100      |
| 3     | F     | 200  | 80 <-- replaced w/max for code 200      |
+-------+-------+------------------------------------------------+ 

在查询中尝试此操作的原因是保留原始数据。这可以通过查询实现吗?还是我需要尝试更新数据?非常感谢!

最佳答案

你可以这样尝试。

Select type1,type2,code,Max(Amt) Over(PARTITION BY Code) AS MaxAmt
from Table1

Sql Fiddle

关于SQL - 选择所有行并将列值替换为带有标识符的最大列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317332/

相关文章:

sql-server-2008 - 生成脚本向导挂起而未编写所有对象的脚本

c# - 在 .NET 4.5.1 中异步执行事务数据库操作

sql-server - 当在 T-SQL 存储过程中声明变量时,它是保存在内存中还是 tempdb 中?

sql - SQL Server 中的月份名称

sql-server-2008 - 多个字符串值参数传递给SSRS中的SP

sql - 错误: Could not use view or function because of binding errors

php - MySQL联合查询,按2个变量排序

sql - 如何联合 xml 路径。数据库

php - 如果在 "Table1"2 SQL 中满足条件,则从 "Table"中删除

sql-server - 将父子 XML 数据导入到 Sql Server 表