从 sql 中多行的特定列中检索数据

Retrieving data from specific columns of multiple rows in sql

我有一个table,存储信息如下,ID为主键:

Link 对于 table 视图:https://drive.google.com/file/d/0B4UzXmbWLTJZaU84WnVZMUJDT3M/view?usp=sharing

ID  ScheduleDate    WorkArea    Employee1   Hours1  Employee2   Hours2  Employee3   Hours3  Employee4   Hours4  Employee5   Hours5  Employee6   Hours6  Employee7   Hours7  Employee8   Hours8
1   7/1/2014    W1  A   8   B   7   C   4   D   3   NULL    0   NULL    0   NULL    0   NULL    0
2   7/1/2014    W2  B   8   C   8               0       0       0       0       NULL
3   7/1/2014    W3  C   8   A   8   E   8   F   8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
4   7/1/2014    W4  D   8   B   8   F   8                   NULL    NULL    NULL    NULL    NULL    NULL
5   7/1/2014    W5  E   8   C   8       NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
6   7/1/2014    W6  F   8   D   8       8       NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
7   8/1/2014    W1  G   4       NULL        NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
8   8/1/2014    W2  A   4       NULL        NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
9   8/1/2014    W3  B   8   F   8       8       8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

对于任何特定的 ScheduleDate,只能有一个 WorkAreaScheduleDateWorkArea 的组合是唯一的)。现在,我想检查特定员工的总小时数是否大于 8 小时,或者在任何一个日期都没有。例如,员工 A 在特定日期的总时数(可以是 hour1、hour2 或任何基于员工在 table 中的职位)不应超过 8 小时。我该如何检查?

请帮忙。

谢谢

您并不是真的严格需要每个联合查询的别名:

with t as (
    select ScheduleDate, Workarea, Employee1 as Employee, Hours1 as Hrs union all
    select ScheduleDate, Workarea, Employee2 as Employee, Hours2 as Hrs union all
    ...
    select ScheduleDate, Employee8 as Employee, Hours8 as Hrs
)
select ScheduleDate, Employee, sum(Hrs) as [Hours]
from t
group by ScheduleDate, Employee
having sum(Hrs) > 8