gpt4 book ai didi

SQL 查询 - 需要在 SELECT 或 Subquery 中搜索值日期范围

转载 作者:行者123 更新时间:2023-12-04 08:23:36 25 4
gpt4 key购买 nike

早上好,
诚然,我在 SQL 查询方面有点新手……话虽如此,我的技能正在提高!
我有一个学生人口统计查询,还需要填写“学习模式”首选项
具体日期范围。
在 2020 年大流行期间,我们学校正在使用混合模式。学生可以是面对面的、混合的或远程的。我正在加入一个跟踪该偏好的表格。挑战在于学生的状态可以改变。例如,学生可以在年初开始使用混合动力,而家长可以选择将他们转移到偏远地区。当这种情况发生时,一个新条目被放入表中。我需要能够按特定月份或日期范围显示学生的学习偏好。
以下是查询学生学习偏好表的示例:

SELECT SLP.STUDENTSDCID, DECODE (SLP.LEARNINGPREFERENCE,01,'in-person',02,'Hybrid',03,'Remote') AS LEARNINGPREFERENCE, 
TO_CHAR(SLP.EFFECTIVEDATE,'MM/DD/YYYY') AS EFFECTIVEDATE

FROM S_STU_LEARNINGPREF_C SLP

ORDER BY SLP.STUDENTSDCID



学生卡
偏爱
日期


3432
杂交种
09/16/2020

3506
杂交种
09/16/2020

3541
杂交种
09/16/2020

3563
面对面
09/17/2020

3563
混合
09/16/2020

3588
杂交种
09/16/2020


现在我的查询在基本级别上工作。我必须搜索多个表并重新格式化一些东西。然而,不幸的是,当涉及到学习偏好时,我需要手动搜索重复学生条目的结果,查看生效日期,并将偏好放入相应的列中。
这是整个查询:
SELECT S.STUDENT_NUMBER, S.STATE_STUDENTNUMBER AS SASID, NVL(SCF.PSCORE_LEGAL_FIRST_NAME,S.FIRST_NAME) AS FNAME, 
NVL(SCF.PSCORE_LEGAL_MIDDLE_NAME,S.MIDDLE_NAME) AS MNAME, NVL(SCF.PSCORE_LEGAL_LAST_NAME,S.LAST_NAME) AS LNAME,
TO_CHAR(S.DOB,'MM/DD/YYYY') AS DOB, '' AS FREE_REDUCED_IND,
NVL(NVL(LTRIM(regexp_substr(S.MOTHER, '[^,]+', 1, 2)),LTRIM(regexp_substr(S.FATHER, '[^,]+', 1, 2))),SCF.GUARDIAN_FN) AS PRIMARY_CONTACT_FNAME,
NVL(NVL(LTRIM(regexp_substr(S.MOTHER, '[^,]+', 1, 1)),LTRIM(regexp_substr(S.FATHER, '[^,]+', 1, 1))),SCF.GUARDIAN_LN) AS PRIMARY_CONTACT_LNAME,
regexp_substr(S.MAILING_STREET, '[^,]+', 1, 1) AS STU_STREET_ADDR_1, regexp_substr(S.MAILING_STREET, '[^,]+', 1, 2) AS STU_STREET_ADDR_2,
S.MAILING_CITY AS STU_STREET_CITY, S.MAILING_ZIP AS STU_STREET_ZIP, '0'||S.SCHOOLID AS SCHOOL_ID,
DECODE(S.SCHOOLID,1690005,'0169',1730005,'0173',1730010,'0173',2500005,'0250',7400405,'0740',7400505,'0740') AS DISTRICT_CODE,'' AS OCT_MODE, '' AS NOV_MODE

DECODE (SLP.LEARNINGPREFERENCE,01,'in-person',02,'Hybrid',03,'Remote') AS "LEARNINGPREFERENCE", TO_CHAR(SLP.EFFECTIVEDATE,'MM/DD/YYYY') AS EFFECTIVE_DATE

FROM STUDENTS S
LEFT JOIN STUDENTCOREFIELDS SCF ON S.dcid = SCF.studentsdcid
LEFT JOIN S_STU_LEARNINGPREF_C SLP ON S.dcid = SLP.studentsdcid

WHERE S.ENROLL_STATUS = '0'

ORDER BY S.LAST_NAME, S.FIRST_NAME
理想情况下,我将能够在我的选择中添加某种子查询,这些子查询将搜索学习偏好表并将结果条目放入适当的列中。
任何帮助,将不胜感激。
谢谢你。

最佳答案

最明显的解决方案是创建一个包含首选项的表,例如

create table preference as
select '01' pref_id, 'in-person' name from dual union all
select '02' , 'hybrid' from dual union all
select '03' , 'remote' from dual;
并将其与查询的其余部分结合起来:
select 
s.studentsdcid,
p.name learningpreference,
to_char(s.effectivedate, 'mm/dd/yyyy') effectivedate
from s_stu_learningpref_c s join preference p on p.id = s.learningpreference
order by s.studentsdcid;

否则,如果您无法创建表(不过,我看不出为什么不创建表),您可以使用子查询或 CTE(公用表表达式,也称为 WITH 因子分解子句),例如
with preference (pref_id, name) as
(select '01' pref_id, 'in-person' name from dual union all
select '02' , 'hybrid' from dual union all
select '03' , 'remote' from dual
)
select
s.studentsdcid,
p.name learningpreference,
to_char(s.effectivedate, 'mm/dd/yyyy') effectivedate
from s_stu_learningpref_c s join preference p on p.id = s.learningpreference
order by s.studentsdcid;

关于SQL 查询 - 需要在 SELECT 或 Subquery 中搜索值日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65381654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com