【问题标题】:SQL Query existing table within an existing table resultsSQL查询现有表内的现有表结果
【发布时间】:2020-11-10 19:32:31
【问题描述】:

所以我希望将一个表放在一起,该表是由一个名为 edsessioncentredates 的现有表产生的;

我想要的是所有参加 2020 年 11 月考试的人,让决赛桌也向我展示他们过去参加的考试(也存在于原桌中)。

我有一个唯一标识符是 CandidateCode

唯一的问题是我必须按年份和会话过滤原始表,但是我如何获取这个(唯一标识符)的结果,然后绘制以前参加的考试的结果以形成一个表。

到目前为止,我已经能够制作出的东西,但它不起作用,因为它只拉到 2020 年 而我需要的是给2020年坐过的每个人一个结果,他们过去还坐过什么;

select distinct es.year, ES.session,SB.CandidateCode
from edsessioncentredates ECD

left Join edsessionbookings SB on SB.sessioncentredateID = ECD.SessioncentredateID
left Join edsessions ES on ES.SessionID = ECD.SessionID
left JOIN EDProgrammes P on P.ID = sb.programmeID

where 
 sb.candidatecode in (select sb.candidatecode  from edsessioncentredates ECD
                        where p.ProgrammeTitle like ('General Certificate%') and ES.Year = '2020' and es.session = 'november')

【问题讨论】:

  • 查询的最后一行包含... and ES.Year = '2020' ... 。这是否解释了为什么您只能获得 2020 年的记录?
  • 您可以在问题中放置带有示例数据的创建表和插入脚本,并获得所需的输出?
  • 我需要 es.year = '2020' 因为这是过去数据将通过唯一标识符 'SB.CandidateCode' 建立的父参数基础

标签: mysql join reporting-services datatable where-clause


【解决方案1】:

您的子查询在子查询本身之外引用。

看起来您只是使用子查询来获取候选人列表,请尝试将 WHERE 子句更改为...

WHERE sb.candidatecode in (
                            SELECT DISTINCT b.CandidateCode
                                FROM edsessioncentredates a
                                    JOIN edsessionbookings b ON b.sessioncentredateID = a.SessioncentredateID
                                    JOIN edsessions c ON c.SessionID = a.SessionID
                                    JOIN EDProgrammes d ON d.ID = b.programmeID
                                WHERE d.ProgrammeTitle LIKE ('General Certificate%') 
                                    AND c.Year = '2020' 
                                    AND c.session = 'november'
                                )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多