【发布时间】:2014-03-04 03:30:49
【问题描述】:
所以我有一个交叉表来衡量在单个设施中花费的小时数。我们的行分隔工作时间的任务类型,列分隔工作时间所在的设施。
我遇到的问题是,在我们的数据库中,我们有 2 个级别的设施。每个 1 级设施在其下方有 10 个 2 级“子”系统。我们想要的是能够将所有 2 级设施列的数据滚动到它们各自的 1 级设施父级中。
我在下面提供了一个示例。第一个 t̶a̶b̶l̶e̶ 交叉表是我拥有的,我想进入第二个 t̶a̶b̶l̶e̶ 交叉表。
因此,在我们的系统中,“父”和“子”设施通过名为 OBJ_PARENT 的字段连接。每个“子”在 OBJ_PARENT 中都有其“父”的名称。
我会根据要求提供我编写的 SQL。
编辑:我在下面提供了我当前的 SQL
select EVT_WORKORDER, EVT_DEPARTMENT, EVT_WOSTATUS, EVT_WOTYPE, EVT_FACILITY, OBJ_FACILITY, OBJ_PMD, OBJ_PARENT, BOO_HOURS, BOO_DATE, BOO_ENTERED, BOO_ACTIVITY, BOO_PERSON, ACT_ACTIVITY, ACT_TASK, ACT_WORKORDER, PRV_CODE, PRV_PROPERTY, PRV_VALUE,
sum(case when boo_person <> 'UNPAID' then boo_hours else 0 end ) "Paid Hours",
sum( boo_hours ) "All Hours"
FROM R5EVENTS
JOIN R5OBJECTS ON EVT_FACILITY = OBJ_FACILITY
JOIN R5BOOKEDHOURS ON BOO_EVENT = EVT_WORKORDER
join R5ACTIVITIES on EVT_WORKORDER = ACT_WORKORDER
JOIN r5propertyvalues ON ( ACT_TASK || '#0' = PRV_CODE)
where prv_property = 'CORESRV'
and ACT_ACTIVITY= BOO_ACTIVITY
AND EVT_DEPARTMENT = 'PK-MAINT'
AND EVT_WOTYPE IN ('JOB', 'PPM')
AND EVT_WOSTATUS IN ('R', 'FC', 'C', 'H', 'FI', 'CI', 'AP', 'IP', 'DF')
and OBJ_PMD in (#PROMPTMANY ('PMD')#)
and (OBJ_FACILITY in (#PROMPTMANY ('Park')#)
OR
OBJ_PARENT in ( SELECT OBJ_FACILITY from R5OBJECTS where OBJ_FACILITY in (#PROMPTMANY ('Park')#)))
group by EVT_WORKORDER, EVT_DEPARTMENT, EVT_WOSTATUS, EVT_WOTYPE, EVT_FACILITY, OBJ_FACILITY, OBJ_PMD, OBJ_PARENT, BOO_HOURS, BOO_DATE, BOO_ENTERED, BOO_ACTIVITY, BOO_PERSON, ACT_ACTIVITY, ACT_TASK, ACT_WORKORDER, PRV_CODE, PRV_PROPERTY, PRV_VALUE
BOO 代表“已预订”
【问题讨论】:
-
如果你的表在数据库中看起来像这样,你需要阅读规范化。