select 列两次 table 在不同条件下 Psql
select column twice of same table on different condtion Psql
我正在使用 Odoo11 并使用 psql。我想 select 在不同的条件下对相同的 table 两次相同的列,为此,我正在使用 case 语句并且我得到了输出,但不是预期的那样。因为我想在一行中输出,但它有两行。
查询
SELECT project_id,
CASE WHEN project_type = 'Internal' THEN SUM(unit_amount) END,
CASE WHEN project_type = 'Project' THEN SUM(unit_amount) END
FROM account_analytic_line where project_id = 347 GROUP BY project_id,project_type
输出截图:
对于上面的屏幕截图,它为相同的 project_id 生成两行,并希望这些列在同一行中用于相同的 project_id。
提前致谢
要在单行中获取结果,您可以使用 window 函数:
select distinct on (project_id)
project_id,
sum(unit_amount) FILTER (where project_type = 'Internal') over(PARTITION BY project_id) as intern,
sum(unit_amount) FILTER (where project_type = 'Project') over(PARTITION BY project_id) as project
FROM account_analytic_line
使用合适的 where 子句进行扩展。
我正在使用 Odoo11 并使用 psql。我想 select 在不同的条件下对相同的 table 两次相同的列,为此,我正在使用 case 语句并且我得到了输出,但不是预期的那样。因为我想在一行中输出,但它有两行。
查询
SELECT project_id,
CASE WHEN project_type = 'Internal' THEN SUM(unit_amount) END,
CASE WHEN project_type = 'Project' THEN SUM(unit_amount) END
FROM account_analytic_line where project_id = 347 GROUP BY project_id,project_type
输出截图:
对于上面的屏幕截图,它为相同的 project_id 生成两行,并希望这些列在同一行中用于相同的 project_id。
提前致谢
要在单行中获取结果,您可以使用 window 函数:
select distinct on (project_id)
project_id,
sum(unit_amount) FILTER (where project_type = 'Internal') over(PARTITION BY project_id) as intern,
sum(unit_amount) FILTER (where project_type = 'Project') over(PARTITION BY project_id) as project
FROM account_analytic_line
使用合适的 where 子句进行扩展。