sql - 具有附加限制的多个参数的 SQL Server Max() 值
问题描述
我想获得每个参数的最大值,但在每个参数的单独限制内。这是示例表:
+-----------+------+------+------+
| VehicleID | Par1 | Par2 | Par3 |
+-----------+------+------+------+
| 1 | 6 | 9 | NULL |
| 2 | 7 | 7 | 1 |
| 3 | 10 | 3 | 2 |
| 1 | 8 | NULL | 7 |
| 2 | 10 | 1 | 6 |
| 3 | 6 | 8 | 9 |
| 1 | 10 | 4 | 11 |
| 2 | 11 | NULL | NULL |
| 3 | 3 | 6 | 12 |
+-----------+------+------+------+
我们的想法是获取每个车辆 ID 分组的 Par1、Par2 和 Par3 的最大值,但最大值应低于 9。如果仅针对 1 个参数,则查询将是
select vehicleID, max(Par1) from Table1 where Par1<9 group by VehicleID
有没有办法用 1 个查询来做到这一点,所以结果应该是:
+-----------+---------+---------+---------+
| VehicleID | MaxPar1 | MaxPar2 | MaxPar3 |
+-----------+---------+---------+---------+
| 1 | 8 | 4 | 7 |
| 2 | 7 | 7 | 6 |
| 3 | 6 | 8 | 2 |
| | | | |
+-----------+---------+---------+---------+
解决方案
条件聚合是解决这个问题的最简单方法。
declare @Something table
(
VehicleID int
, Par1 int
, Par2 int
, Par3 int
)
insert @Something values
(1, 6, 9 , NULL)
, (2, 7, 7 , 1 )
, (3, 10, 3 , 2 )
, (1, 8, NULL, 7 )
, (2, 10, 1 , 6 )
, (3, 6, 8 , 9 )
, (1, 10, 4 , 11 )
, (2, 11, NULL, NULL)
, (3, 3, 6 , 12 )
select VehicleID
, MaxPar1 = max(case when Par1 < 9 then Par1 end)
, MaxPar2 = max(case when Par2 < 9 then Par2 end)
, MaxPar3 = max(case when Par3 < 9 then Par3 end)
from @Something
group by VehicleID
推荐阅读
- wordpress - 安装 Polylang for WooCommerce 后没有语言选项
- sql - 根据进入另一个表的列更新表
- c++ - FFmpeg h265 编码->解码,C++
- java - Java内存泄漏验证
- html - 如何更改 SVG 的高度,以便用户不必向下滚动?
- cmd - 执行带有参数的 jar 隐藏一些参数的文本
- groovy - 如何使用 groovy.util.XmlParser 访问包含句点的 XML 节点
- chilkat - 为什么 purebasic chilkat 模块 30 天试用激活语法失败?
- apache-kafka - Kafka Streams - init() 中的转发记录
- javascript - 过滤模态div内的数据