Sql 一列中的查询对另一个查询的结果

Sql 一列中的查询对另一个查询的结果,sql,sql-server,Sql,Sql Server,我需要创建一个报告,显示每周上课的出席情况。我们使用电子登记系统,这样每个人的信息都会与日期一起保存到数据库中 我可以很容易地编写一个查询,获取某一天报到上课的人的列表。该查询的结果如下所示: +-----------+------------+-----------+ | person id | first name | last name | +-----------+------------+-----------+ | 1234 | john | smith

我需要创建一个报告,显示每周上课的出席情况。我们使用电子登记系统,这样每个人的信息都会与日期一起保存到数据库中

我可以很容易地编写一个查询,获取某一天报到上课的人的列表。该查询的结果如下所示:

+-----------+------------+-----------+
| person id | first name | last name |
+-----------+------------+-----------+
|      1234 | john       | smith     |
|      1235 | jane       | smith     |
+-----------+------------+-----------+
+-----------+------------+-----------+------------+
| person id | first name | last name | attendance |
+-----------+------------+-----------+------------+
|      1234 | john       | smith     |          3 |
|      1235 | jane       | smith     |          5 |
+-----------+------------+-----------+------------+
但我需要的是一个额外的专栏,说明特定的人在12周内参加了多少次课程。所以我想要的结果是这样的:

+-----------+------------+-----------+
| person id | first name | last name |
+-----------+------------+-----------+
|      1234 | john       | smith     |
|      1235 | jane       | smith     |
+-----------+------------+-----------+
+-----------+------------+-----------+------------+
| 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将在每次上课时输入到该表中。

您应该能够将分组依据添加到查询中:

SELECT Person_ID, FIRST_NAME, LAST_NAME, COUNT(Person_ID) AS Attendance
FROM <YOURTABLE>
WHERE <DateField> BETWEEN <begindate> AND <enddate>
GROUP BY Attendance
选择人员ID、姓名、姓氏、计数(人员ID)作为考勤
从…起
在和之间的什么地方
按出席人数分组
小组成员将计算该人员在课堂上出现的次数,并将其放入一个单元格中

我不能保证此代码运行,因为您的帖子缺少一些信息。请替换尖括号中的所有内容。

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

然后,我在该CTE上选择了DISTINCT,并添加了一个包含所有列名的
groupby


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

您应该发布表格中的一些样本数据,而不仅仅是输出格式,还有几个问题可以帮助您找到一个好答案:1)您想知道本周参加会议的人,以及他们在过去12周内参加会议的次数,还是过去12周内任何时候参加过的人?2) 它总是“最后十二周”,还是“在从日期x开始的一段时间内”?3) 在这12周内,人们可以参加不同的课程吗?如果可以的话,你需要单独显示出勤情况吗?4) 是‘从今天起十二周’还是‘从上周日起十二周’?将答案编辑到原始问题中。请用谷歌搜索并了解SQL中的GROUP BY子句。@vkp出于保密原因,我不想发布示例数据。@AHIGNGNS 1)它需要计算一个人在12周内(包括上周日)参加该课程的次数。2) 从当前日期算起通常是12周3)我想他们可能一天上两节课,但所有的课都在周日,我不太可能不解释这一点4)这都是基于周日,所以我猜答案是从上周日算起的12周。@NickTaylor示例数据保密性问题是假的,但足够现实,允许开发人员创建一个可行的解决方案。此外,还有一个非常好的工具,可以让你生成假数据<代码>分组依据应该在
个人ID、名字、姓氏
是的,我很糟糕,我是在即兴写下的。我可以将此查询用作子查询或其他我已经编写的查询,以显示我正在查看的课程的参与者吗?这很有效,但只返回1周日期范围的结果。我只需要在“出席”栏中查看12周的时间段,将其放在12周的日期范围内。比如2015-01-01和2015-03-01之间