PostgreSQL按唯一ID首行展示数值其余填充null/0的SQL查询问题
实现方案
你可以通过PostgreSQL的窗口函数ROW_NUMBER()实现需求,示例代码如下:
版本1:非首行返回NULL
SELECT contrat_pentete_id, chiffre_affaires_id, CASE WHEN rn = 1 THEN chiffre_affaires_montant_total ELSE NULL END AS chiffre_affaires_montant_total FROM ( SELECT DISTINCT contrat_pentete_id, chiffre_affaires_id, chiffre_affaires_montant_total, ROW_NUMBER() OVER (PARTITION BY contrat_pentete_id ORDER BY chiffre_affaires_id ASC) AS rn FROM chiffre_affaires ) t ORDER BY contrat_pentete_id, chiffre_affaires_id;
版本2:非首行返回0
只需修改CASE语句的ELSE分支即可:
CASE WHEN rn = 1 THEN chiffre_affaires_montant_total ELSE 0 END AS chiffre_affaires_montant_total
逻辑说明
- 内层查询通过
PARTITION BY contrat_pentete_id将数据按合同头ID分组 - 每组内按
chiffre_affaires_id升序排序,最小ID对应的行号为1 - 外层查询通过
CASE判断行号,仅行号为1的行返回原值,其余行返回指定的空值或0 - 末尾的
ORDER BY为可选配置,用于保证输出顺序和分组展示逻辑一致
内容的提问来源于stack exchange,提问作者Mtyz
相关产品推荐
相关产品推荐

