首页 > 解决方案 > 优先选择列值的 SQL 选择

问题描述

我是 SQL 新手,我想问一下如何根据偏好和分组选择条目。

+----------+----------+------+
| ENTRY_ID | ROUTE_ID | TYPE |
+----------+----------+------+
|        1 |       15 |    0 |
|        1 |       26 |    1 |
|        1 |       39 |    1 |
|        2 |       22 |    1 |
|        2 |       15 |    1 |
|        3 |       30 |    1 |
|        3 |       35 |    0 |
|        3 |       40 |    1 |
+----------+----------+------+

对于上表,我想为每个条目选择 1 个条目,ENTRY_ID并为返回的以下首选项ROUTE_ID

  1. IF TYPE = 0 可用于任何具有相同 的条目,返回所有具有相同的条目ENTRY_ID的最小值ROUTE_IDTYPE = 0
  2. 如果ENTRY_ID只有相同TYPE = 1的可用,则返回最小值ROUTE_ID

查询的预期结果如下:

+----------+----------+------+
| ENTRY_ID | ROUTE_ID | TYPE |
+----------+----------+------+
|        1 |       15 |    0 |
|        2 |       15 |    1 |
|        3 |       35 |    0 |
+----------+----------+------+

谢谢您的帮助!

标签: sqlms-access

解决方案


您可以同时按TYPEand进行分组ENTRY_ID,然后使用该HAVING子句过滤掉那些TYPE不是该记录的最小值的。

SELECT ENTRY_ID, MIN(ROUTE_ID), TYPE
FROM MyTable
GROUP BY ENTRY_ID, TYPE
HAVING TYPE = (SELECT MIN(s.TYPE) FROM MyTable s WHERE s.ENTRY_ID = MyTable.ENTRY_ID)

这依赖于类型只能是 0 或 1。如果有更多可能的值,它将只返回最低的类型。


推荐阅读