SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,然后在每个分组中,如果存在b=A,则显示A,如果存在b=T,则显示T,再找到这条数据对应的 id 值
时间: 2023-10-30 13:07:07 浏览: 71
可以使用如下 SQL 语句实现:
```
SELECT MIN(id) AS id, a,
CASE WHEN COUNT(CASE WHEN b = 'A' THEN 1 END) > 0 THEN 'A'
WHEN COUNT(CASE WHEN b = 'T' THEN 1 END) > 0 THEN 'T'
ELSE NULL END AS b
FROM A
GROUP BY a
```
首先按照字段 a 进行分组,然后使用 CASE 表达式判断每个分组中是否存在 b=A 或 b=T,如果存在则显示对应的值,否则显示 NULL。最后用聚合函数 MIN() 获取每个分组中的最小 id 值。
相关问题
SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,然后在每个分组中,如果存在b=1,则显示1,如果存在b=2,则显示2,再找到这条数据对应的 id 值
可以使用如下的 SQL 语句实现:
```
SELECT MIN(id) AS id, a,
CASE
WHEN MAX(b) = 1 THEN 1
WHEN MAX(b) = 2 THEN 2
ELSE NULL
END AS b
FROM A
GROUP BY a
HAVING MAX(b) IN (1,2)
```
这个 SQL 语句会先按照字段 a 进行分组,然后对于每个分组,使用 MAX 函数找到该分组中最大的 b 值,再使用 CASE 语句根据最大的 b 值来判断应该显示的值是 1 还是 2,或者不显示。最后使用 MIN 函数找到该分组中最小的 id 值,并将结果按照 a 分组。由于使用了 HAVING 子句,所以只会返回那些最大的 b 值是 1 或 2 的分组。
SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,并选出最大的b,并找到这条数据对应的id
可以使用如下的 SQL 语句实现:
```sql
SELECT MAX(b) AS max_b, MAX(id) AS id
FROM A
GROUP BY a;
```
这个语句会先按照 a 字段分组,然后在每个分组中找到最大的 b 值和对应的 id 值。注意,这里用到了 MAX() 聚合函数,它会返回指定列中的最大值。
阅读全文