我需要创建一份报告,显示每周上课的次数。我们使用电子登记系统,因此每个人的信息都会在数据库中保存日期。
我可以轻松编写一个查询,获取在给定日期登记入课的人员列表。该查询的结果如下所示:
+-----------+------------+-----------+
| 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都会被输入该表。
答案 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
小组将计算该人出现在课堂上并将其放入一个单元格的次数。
我不保证此代码会运行,因为您发布的内容缺少一些信息。请将所有内容放在尖括号中。
答案 1 :(得分:0)
我做到了! 我为查询创建了一个计算出勤率的CTE。
然后我在该CTE上SELECT DISTINCT
添加了GROUP BY
并添加了所有列名称。
我还在CTE中添加了12周的日期范围。