PrestoDB条件行号生成求助:仅匹配指定条件时递增行号
PrestoDB 实现符合条件行递增行号,否则为0
你需要的是仅当column_1匹配%Cuenta%时行号按顺序递增,其余行显示0。原查询的问题在于,ROW_NUMBER() OVER()会对所有行生成连续行号,不受CASE条件控制。可以通过条件累加+窗口函数实现需求,具体修改如下:
WITH FileCTE AS ( SELECT tipo, column_1, Debe, Haber, Fecha, Numero, Saldo, Saldo_inicial, file_name, -- 标记当前行是否符合条件 CASE WHEN column_1 LIKE '%Cuenta%' THEN 1 ELSE 0 END AS is_match, -- 指定排序字段(必须明确,否则行号顺序不确定,可根据你的业务调整) ROW_NUMBER() OVER (ORDER BY Fecha, Numero) AS row_order FROM "e90df27ca05f47da96d0b3966744739b"."d1c533d450b2490f945966ae78b5f830" ) SELECT tipo, -- 仅当前行符合条件时,显示累计的匹配行数,否则为0 CASE WHEN is_match = 1 THEN SUM(is_match) OVER (ORDER BY row_order) ELSE 0 END AS row, column_1, Debe, Haber, Fecha AS Date, Numero AS number, Saldo, Saldo_inicial, file_name FROM FileCTE
关键逻辑说明:
- 标记匹配行:用
is_match字段标记当前行是否满足column_1 LIKE '%Cuenta%',符合为1,否则为0。 - 明确排序顺序:通过
row_order指定行的排序依据(这里用Fecha和Numero,你可以根据实际业务调整为需要的字段),保证行号的顺序稳定。 - 条件累计行号:使用
SUM(is_match) OVER (ORDER BY row_order)累计所有之前(包括当前)的匹配行数,再通过外层CASE判断,仅在当前行是匹配行时显示累计值,非匹配行显示0。
如果不需要单独的row_order字段,也可以直接把排序字段放到SUM的窗口子句中简化查询:
SELECT tipo, CASE WHEN column_1 LIKE '%Cuenta%' THEN SUM(CASE WHEN column_1 LIKE '%Cuenta%' THEN 1 ELSE 0 END) OVER (ORDER BY Fecha, Numero) ELSE 0 END AS row, column_1, Debe, Haber, Fecha AS Date, Numero AS number, Saldo, Saldo_inicial, file_name FROM "e90df27ca05f47da96d0b3966744739b"."d1c533d450b2490f945966ae78b5f830"
内容的提问来源于stack exchange,提问作者Jeremiah Rodriguez
相关产品推荐
相关产品推荐

