使用多个Where语句编写SQL查询

问题描述 投票:0回答:2

有人可以提供一些关于如何最好地编写具有多个 where 语句的查询的指导吗?

此查询将查看我们当前的学生,并排除那些肯定会离开我们的 13 年级学生,排除那些通知我们他们将从其他年级离开的学生,但需要包括我们被告知要加入的学生我们。这意味着我现在可以运行报告来获取 9 月新学年开始时在这里的学生名单。

我有 2 个表要从中提取数据。

第一个是 dbo.TblPupilManagementPupils,我使用的列是:

  • txtSchoolID(唯一学生标识符)
  • txt姓氏
  • txt名字
  • intNCYear(学生年级)
  • txtAcademicHouse(学生宿舍)
  • txtForm(学生导师/表格组)
  • intSystemStatus(-1 表示学生已离开,0 表示学生尚未开始,1 表示学生当前)
  • intEnrolmentSchoolYear(学生入读学院的年份,例如 2024 年)
  • txtEnrolmentTerm(学生将参加哪个学期,例如冬季、春季、夏季)
  • txtAdmissionsStatus(确定他们是否肯定会加入我们。这将是“6. 已接受”)
  • txtLeavingDate(是显示确切离开日期的日期时间列)

第二个是 dbo.TblPupilManagentCustomFieldValue,我使用的列是:

  • txtSchoolID(唯一学生标识符)
  • txtValue(列出每个学生的多个自定义数据字段。这将过滤到值“确定离开者”)

以下查询返回现在在这里并将在 9 月份入住的所有学生:

SELECT ppl.txtSurname, ppl.txtForename, ppl.intNCYear, ppl.txtAcademicHouse, ppl.txtForm
FROM TblPupilManagementPupils AS PPL
WHERE ppl.intSystemStatus = '1' AND ppl.intNCYear < 13 
ORDER BY ppl.txtSurname, ppl.txtForename

以下查询返回当前在学校但已通知我们离开的所有学生:

SELECT        PPL.txtSurname, PPL.txtForename, PPL.txtLeavingDate, TblPupilManagementCustomFieldValue.txtValue AS LeavingType
FROM            TblPupilManagementPupils AS PPL LEFT OUTER JOIN
                         TblPupilManagementCustomFieldValue ON PPL.txtSchoolID = TblPupilManagementCustomFieldValue.txtSchoolId
WHERE        (TblPupilManagementCustomFieldValue.txtValue = 'Definite Leaver') AND (CONVERT(VARCHAR(25), PPL.txtLeavingDate, 126) LIKE '2024-08-31%')

以下查询返回将在下一学年开始时加入我们的所有学生:

SELECT ppl.txtSurname, ppl.txtforename, ppl.intEnrolmentSchoolYear, ppl.txtEnrolmentTerm, ppl.txtAdmissionsStatus
FROM dbo.TblPupilManagementPupils AS ppl
WHERE ppl.intsystemstatus = 0 AND ppl.intEnrolmentSchoolYear = '2024' AND ppl.txtAdmissionsStatus = '6. Accepted' AND ppl.txtEnrolmentTerm = 'Michaelmas'

我尝试了几种不同的方法来组合这些查询,但没有一个有效。如果有人能给我一些关于如何编写这个查询的指示,我将不胜感激。

我尝试合并选择子查询并以不同的方式编写查询,但无法获得准确的列表。我知道学生的确切人数,因为我是手动计算的。

sql sql-server
2个回答
0
投票

-- 查询检索当前在校且将于 9 月份入住的学生 SELECT txt姓氏、txt前名、intNCYear、txtAcademicHouse、txtForm 来自 dbo.TblPupilManagementPupils 其中 intSystemStatus = 1 和 intNCYear < 13

联盟

--查询检索已通知退学的学生 SELECT PPL.txtSurname、PPL.txtForename、PPL.txtLeavingDate、CFV.txtValue AS LeavingType 来自 dbo.TblPupilManagementPupils AS PPL LEFT JOIN dbo.TblPupilManagementCustomFieldValue AS CFV ON PPL.txtSchoolID = CFV.txtSchoolId WHERE CFV.txtValue = '确定离开者' AND CONVERT(VARCHAR(25), PPL.txtLeavingDate, 126) LIKE '2024-08-31%'

联盟

-- 查询检索下一学年入学的学生 SELECT txt姓氏、txt前名、intEnrolmentSchoolYear、txtEnrolmentTerm、txtAdmissionsStatus 来自 dbo.TblPupilManagementPupils 其中 intSystemStatus = 0 且 intEnrolmentSchoolYear = 2024 且 txtAdmissionsStatus = '6。已接受' AND txtEnrolmentTerm = 'Michaelmas'

在此组合查询中:

The UNION operator is used to combine the results of the three individual queries.
Each individual query retrieves specific information about students based on different criteria.
The UNION operator removes duplicate rows from the result set.
Ensure that the columns selected in each part of the UNION have the same data types and are in the same order to successfully combine the results.

通过将这种组合查询结构与 UNION 结合使用,您可以检索符合各个查询中指定条件的学生的综合列表。根据需要调整色谱柱选择和条件,以根据您的具体要求定制结果。


0
投票

会是这个吗?

select PPL.txtsurname
    , PPL.txtforename
    , PPL.intncyear
    , PPL.txtacademichouse
    , PPL.txtform
from TblPupilManagementPupils as PPL
    --left join only pupils who will be leaving
    left join TblPupilManagementCustomFieldValue L on L.txtschoolid = PPL.txtschoolid
                                                  and L.txtvalue = 'Definite Leaver'
                                                  and cast(PPL.txtleavingdate as date) = '20240831'
where L.txtschoolid is null --exclude everyone who got left joined
    and ( --keep pupils only if they are below year 13
        (PPL.intsystemstatus = '1' and PPL.intncyear < 13)
        or --OR they join next semester
        (PPL.intsystemstatus = 0
        and PPL.intenrolmentschoolyear = '2024'
        and PPL.txtadmissionsstatus = '6. Accepted'
        and PPL.txtenrolmentterm = 'Michaelmas')
    )
order by PPL.txtsurname, PPL.txtforename
© www.soinside.com 2019 - 2024. All rights reserved.