【发布时间】:2015-11-11 06:48:13
【问题描述】:
我正在尝试解决下面的查询,但无法使其完全正常工作,因此真的需要一些帮助。我想要得到的结果如下:
正在工作的部分
- 作为外键存储在 hrs_hours 表中的人员编号
- prs_personel 表中存储的全名
- hrs_hours 表中所有正常小时数的总和
- hrs_hours 中所有 ort(特殊)小时数的总和,以秒为单位 表
不工作的部分
- hrs_taskname = 'Partus Assistentie' 的任务计数,由人员成员在特定年份的整个月内于周末执行。
- hrs_taskname = 'Partus Assistentie' 的任务计数,由工作人员在特定年份的整个月内的工作日执行。
查询结果:
无权放置图片,因此希望通过这种方式获得清晰的结果。
- hrs_prs_fkey(整数):6、11
- prs_fullname(文本):名称 1,名称 2
- normal_time(双精度):46800、461340
- ort_time(双精度):29700、116100
- partusass_weekend: 0, 0
- partusass_week: 2, 2
在结果中,您可以看到 partusass_week 是一年中这些任务的总量。但是,他们都执行了其中一项任务,总计 2,因此我希望他们显示 1 和 1 而不是 2 和 2。我应该如何表达我的(选择计数 ...等...)子查询为了得到我想要的结果?
SELECT hrs_prs_fkey,
prs_fullname,
SUM(EXTRACT (epoch FROM hrs_normaltime)) AS normal_time,
SUM(EXTRACT (epoch FROM hrs_orttime)) AS ort_time,
(SELECT Count(hrs_taskname) AS partusass_weekend FROM hrs_hours
WHERE hrs_taskname = 'Partus Assistentie'
AND EXTRACT(MONTH FROM "hrs_date") = 7
AND EXTRACT(YEAR FROM "hrs_date") = 2015
AND extract(dow from hrs_date) in (0,6)),
(SELECT Count(hrs_taskname) AS partusass_week FROM hrs_hours
WHERE hrs_taskname = 'Partus Assistentie'
AND EXTRACT(MONTH FROM "hrs_date") = 7
AND EXTRACT(YEAR FROM "hrs_date") = 2015
AND extract(dow from hrs_date) in (1,2,3,4,5))
FROM hrs_hours
LEFT JOIN prs_personel ON hrs_hours.hrs_prs_fkey = prs_personel.prs_pkey
WHERE EXTRACT(MONTH FROM "hrs_date") = 7
AND EXTRACT(YEAR FROM "hrs_date") = 2015
GROUP BY hrs_prs_fkey, prs_fullname
ORDER BY hrs_prs_fkey ASC
提前感谢您的阅读和思考。
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
标签: sql postgresql select count subquery