另一个查询在一列中查询的结果

时间:2015-12-10 17:47:50

标签: sql sql-server

我需要创建一份报告,显示每周上课的次数。我们使用电子登记系统,因此每个人的信息都会在数据库中保存日期。

我可以轻松编写一个查询,获取在给定日期登记入课的人员列表。该查询的结果如下所示:

+-----------+------------+-----------+
| 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)

您应该可以在查询中添加一个组:

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周的日期范围。