样本数据:我需要根据团队 Select 最大部门.房间列中的匹配值还应该有以00‘S为前导的其他房间

ID name team Rooms
1235 MTAYLOR Blue ZQ123, ZQ456, ZQ654
3245 MTAYLOR Blue ZQ123, 00254, 00859

为此,我需要获得基于房间号的最大ID等于ZQ123,但也包含前导零房间 如果00‘S前导的房间中没有记录,则在房间列中 Select ID与ZQ123匹配以 Select 最大ID

Select ID、名称、团队最大值(ID) 其中,房间=‘ZQ123’,房间包含前导00‘S 如果房间中没有以00‘S开头的行,则 Select ID与ZQ123匹配

我需要的结果:

ID name team Rooms
3245 MTAYLOR Blue ZQ123, 00254, 00859

推荐答案

您似乎希望结合使用ROW_NUMBER分析函数和CASE表达式来查找房间以00开头,然后按id值递减顺序排列的第一行:

SELECT id, name, team, rooms
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER (
           ORDER BY CASE
                    WHEN ', ' || rooms LIKE '%, 00'
                    THEN 1
                    ELSE 2
                    END,
                    id DESC
         ) AS rn
  FROM   table_name t
  WHERE  ', ' || rooms || ', ' LIKE '%, ZQ123, %'
)
WHERE  rn = 1;

其中,对于样本数据:

CREATE TABLE table_name(ID, name, team, Rooms) AS
SELECT 1235, 'MTAYLOR', 'Blue', 'ZQ123, ZQ456, ZQ654' FROM DUAL UNION ALL
SELECT 3245, 'MTAYLOR', 'Blue', 'ZQ123, 00254, 00859' FROM DUAL;

输出:

ID NAME TEAM ROOMS
3245 MTAYLOR Blue ZQ123, 00254, 00859

fiddle

Sql相关问答推荐

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

Postgres:对包含数字的字符串列表进行排序

用VB.NET在Dapper中实现MS Access数据库顺序透视

提取连续时间戳范围的SQL

postgres中的条件索引和触发器

在 Postgres 中将结果按几十年划分

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

不同计数的 Postgres PIVOT 表

SQL Server 查询 WHERE LIKE

具有分组条件的不同计数 (DAX)

将空 JSON 数组添加到 SQL Server 表列中的 JSON 字符串

获取上个月和上一年的值

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

BigQuery导航函数计算ID

多行状态下的分组查询判断状态

SQL 按 id 运行总计并受条件限制(在窗口上)

使用 SAVE TRANSACTION 时 BEGIN 和 COMMIT 语句的数量不匹配

PlSql 陷入死循环

来自 SQL Server 的树层次 struct 图的 JSON

如何根据 ID 和指标从 2 个表中找到不同的值?