You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何根据trimestre列条件选取其他列对应值

报错原因

你在CASE表达式中写的子查询(SELECT 202201 FROM siila_01)会返回siila_01全表所有行的202201列值,并非当前计算行对应的列值,只要siila_01表数据量超过1行,就会触发你遇到的more than one row returned by a subquery used as an expression报错,你的判断是正确的。
实际上你在外层查询中已经可以直接访问到当前行的202104、202201列,完全不需要额外嵌套子查询取值,直接引用对应列名即可。

修正后的查询语句
SELECT *,
    CASE 
        WHEN trimestre = '22T1' THEN "202201"
        WHEN trimestre = '21T4' THEN "202104"
    END AS ocupante
FROM (
    SELECT *, 
        CASE 
            WHEN série = 1 THEN '22T1'
            WHEN série = 2 THEN '21T4'
        END AS trimestre
    FROM (
        SELECT *, 
            CONCAT(siila_id, galpão, módulo) AS id_conjunto, 
            generate_series(1,2) AS série
        FROM siila_01
    ) AS sub_01
) AS sub_02;
注意事项
  • 你的列名是数字开头的202104、202201,在PostgreSQL中引用这类不符合常规标识符命名规则的列名时,必须用双引号包裹,否则Postgres会把它识别为数字常量,无法读取到对应列的存储值。
  • 如果后续需要新增更多季度的匹配规则,直接在CASE语句中追加WHEN分支即可,例如要匹配22T2对应202204列的值,只需新增一行WHEN trimestre = '22T2' THEN "202204"。

内容的提问来源于stack exchange,提问作者palm_e

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 06:12:58