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

时间:2015-03-17 21:18:36

标签: sql ssms

我有一个表,它存储如下信息,并以ID作为主键:

表格视图的链接: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的小时数(可以是小时1,小时2或基于员工在表中的位置的任何内容)不应超过8小时。我该如何检查?

请帮忙。

由于

1 个答案:

答案 0 :(得分:0)

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

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