2015-12-10 105 views
-1

我需要创建一个报告,显示出席每周的课程。我们使用电子入住系统,以便将每个人的信息与日期一起保存到数据库中。在另一个查询中查询一列的结果

我可以轻松编写一个查询,获取在给定日期签入该班级的人员列表。从查询的结果是这个样子:

+-----------+------------+-----------+ 
| person id | first name | last name | 
+-----------+------------+-----------+ 
|  1234 | john  | smith  | 
|  1235 | jane  | smith  | 
+-----------+------------+-----------+ 

但我需要的是说,特定的人有多少次参加12周的时间内,这个类的附加列。所以我想结果会是这个样子:

+-----------+------------+-----------+------------+ 
| person id | first name | last name | attendance | 
+-----------+------------+-----------+------------+ 
|  1234 | john  | smith  |   3 | 
|  1235 | jane  | smith  |   5 | 
+-----------+------------+-----------+------------+ 

我也能得到正确的结果与一个COUNT查询“出勤”一栏。此查询仅适用于在考勤表中指定人员ID的情况。

因此,我需要一个查询,它将从第一个查询中提取人员id,并计算出该人员在过去12周内参加过多少次并将其应用到列中。

附加信息: 它需要指出在包括上个星期日在内的12周时间内,该人参加过该课程的次数。

它始终是从当前日期12周

我想这是可能的,他们可能已经参加了每天两班,但所有的类都是在星期天,这是足够不太可能,我不需要对此的帐户

这是基于一个星期天,所以我想答案是从上周日起的12周。

这里是我的查询,返回谁在上周日检查的结果:

SELECT 
pb.person_id, pb.nick_name, pb.last_name, COS.occurrence_name, COS.occurrence_description, COS.date_created, COS.occurrence_type, COS.occurrence_id, sm.role_luid 
FROM core_v_occurrence_service COS 
JOIN core_occurrence_attendance oa ON oa.occurrence_id = COS.occurrence_id 
JOIN core_v_person_basic pb ON pb.person_id = oa.person_id 
JOIN smgp_member sm ON sm.person_id = OA.person_id 
WHERE oa.attended = 1 
AND COS.occurrence_type = 140 
AND COS.date_created BETWEEN (DATEADD(week,-1,GETDATE())) AND GETDATE() 
AND sm.role_luid IN (24,25, 28) 
AND sm.group_id = 3 

而这里的,让我多少次有人参加了一个类的计数查询:

SELECT COUNT (oa.person_id) 
FROM core_occurrence_attendance oa 
JOIN core_v_occurrence_service COS on cos.occurrence_id = oa.occurrence_id 
WHERE oa.person_id = 27276 
AND oa.attended = 1 
AND COS.occurrence_type = 140 
AND COS.date_created BETWEEN (DATEADD(week,-12,GETDATE())) AND GETDATE() 

基本上我需要的是一个查询,它将一个人的人员ID输入到考勤表中的次数。因为每次参加课程时都会将人员的个人ID输入该表格。

+2

你应该从表格中发布一些示例数据,不仅仅是输出格式 –

+0

几个问题可以帮助你找到一个好的答案:1)你希望那些在这个星期出席的人加上他们出席的次数在过去的十二周内,还是在过去十二个星期中曾经去过的人? 2)它总是'过去的十二周',还是'从_x_'开始的一段时间? 3)在这十二周内,人们是否可以参加不同的课程?如果是的话,你是否需要单独出席? 4)是“距今天十二周”还是“上周日十二周”?编辑原始问题的答案。 – AHiggins

+1

请谷歌和了解SQL中的GROUP BY子句。 –

回答

0

我做到了! 我为查询出勤的查询创建了一个CTE。

然后我在该CTE上做了SELECT DISTINCT并添加了一个GROUP BY以及所有列名。

我还在CTE中添加了我需要的12周的日期范围。

+0

很高兴听到它。 –

1

您应该能够通过添加一个组到查询:

SELECT Person_ID, FIRST_NAME, LAST_NAME, COUNT(Person_ID) AS Attendance 
FROM <YOURTABLE> 
WHERE <DateField> BETWEEN <begindate> AND <enddate> 
GROUP BY Attendance 

集团通过将计算该人曾多少次出来上课,并把它变成一个细胞。

我不保证这段代码运行,因为你的文章是缺少一些information.replace在尖括号中的一切。

+1

'group by'应该在'Person_ID,FIRST_NAME,LAST_NAME'上 –

+0

是的,我的坏我是从袖口书写 –

+0

我可以使用这个查询作为子查询,或者是我已经写过的,以显示谁参加了I级我在看? –

相关问题