我正在尝试这样做:
SELECT *,
case when SUM(fld_allocated_time) / 24 < fld_allocated_days
then 'OK'
else 'NOK'
end as Alocated
from
(
SELECT tbl_project.fld_id, tbl_project.fld_allocated_days,
tbl_project_timesheet.fld_allocated_time
FROM "SD_PRJ".tbl_project
INNER JOIN "SD_PRJ".tbl_project_timesheet
ON tbl_project.fld_id=tbl_project_timesheet.fld_id
) AS Alias
我得到这个错误:
ERROR: column "total.fld_id" must appear in the GROUP BY clause or be used in an aggregate function SQL state: 42803 Character: 8
tbl = 表格
fld = 列
SD_PRJ = 架构名称
最佳答案
如果您想为查询的所有行计算一个总和,并将其与每一行中的 fld_allocated_days 进行比较,那么您可以试试这个:
with Alias as (
SELECT * from (
SELECT tbl_project.fld_id, tbl_project.fld_allocated_days,
tbl_project_timesheet.fld_allocated_time
FROM "SD_PRJ".tbl_project
INNER JOIN "SD_PRJ".tbl_project_timesheet
ON tbl_project.fld_id=tbl_project_timesheet.fld_id
)
select a.*,
case when b.sm < fld_allocated_days then 'OK' else 'NOK' end as Alocated
from Alias a cross join
(select SUM(fld_allocated_time) / 24 sm from Alias) b;
不过,我想你需要这样的东西:
SELECT tbl_project.fld_id,
case when SUM(tbl_project_timesheet.fld_allocated_time) / 24
< fld_allocated_days
then 'OK'
else 'NOK'
end as Alocated
FROM "SD_PRJ".tbl_project
INNER JOIN "SD_PRJ".tbl_project_timesheet
ON tbl_project.fld_id=tbl_project_timesheet.fld_id
GROUP BY tbl_project.fld_id, tbl_project.fld_allocated_days;
关于sql - select and join 错误必须出现在 GROUP BY 子句中或在聚合函数中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743984/