解决SQL中QUALIFY子句ROW_NUMBER()排序的STRUCT类型报错问题
解决ORDER BY中STRUCT类型排序报错问题
你报错的原因是把两个CASE表达式用括号包裹在一起了,数据库会将其解析成STRUCT类型,而排序操作不支持按STRUCT类型排序。
只需要去掉包裹两个CASE的括号,让它们作为独立的排序条件即可,完全保留你想要的先按status优先级、再按type优先级、最后按registration_date降序的逻辑:
registrations AS ( SELECT * FROM database QUALIFY ROW_NUMBER() OVER ( PARTITION BY id ORDER BY CASE WHEN status = 'active' THEN 0 WHEN status IN ('received', 'submitted') THEN 1 WHEN status IN ('cancelled', 'rejected') THEN 2 -- 原代码中`status_`应为笔误,已修正为`status` ELSE 3 END, CASE WHEN type = 'xy' THEN 0 WHEN type = 'yx' THEN 1 ELSE 2 END, registration_date DESC ) = 1 )
另外修正了原代码中status_的笔误,避免因字段名错误引发新问题。
内容的提问来源于stack exchange,提问作者xxx_anna
相关产品推荐
相关产品推荐

