在SQL Server中构建SQL查询时出现混乱

如何解决在SQL Server中构建SQL查询时出现混乱

| 我的桌子如下图所示
School              Course              Date             Status

SCH1            SCH1CRS1        2011-01-15           S

                SCH1CRS1        2011-01-17           C

SCH1            SCH1CRS2        2011-01-15           S

SCH2            SCH2CRS1        2011-01-15           S

                SCH2CRS1        2011-01-21           C

SCH2             SCH2CRS2        2011-01-22          S

               SCH2CRS2          2011-01-25          C
状态S =开始,C =完成,日期是开始日期和完成日期。当课程开始时,用户输入schoolID,课程ID,日期和状态,但是当课程完成时,用户输入课程ID,日期和状态。用户不输入SchoolID。从表中我们可以了解到SCH1CRS1和SCH1CRS2属于SCH1。我需要知道的是,在一所特定的学校中,在特定的日期,有多少门课程开始但尚未完成。 您可以在SCH1中看到,在2011年1月15日开始了两门课程,但只有一门课程完成了。课程何时完成无关紧要。我所需要知道的全部是完成还是没有完成。在SCH2中,两个课程在不同的日期开始,但是都已完成。 结果表应该是这样的
Input Date: 2011-01-15

School             Not completed  

SCH1                       1

SCH2                       0

Input Date: 2011-01-22

School           Not Completed

SCH2                      0 
我认为这是一个凌乱的表,没有遵循数据库设计规则。但这就是我所拥有的。没有选择。 谢谢     

解决方法

        您必须找到与已开始的课程相关的已完成的课程,如果没有已完成的课程,请计数1。
SELECT startedCourse.School AS School,SUM(CASE WHEN completedCourse IS NULL THEN 1 ELSE 0 END) AS NotCompleted
FROM MyTable startedCourse
    LEFT OUTER JOIN MyTable completedCourse
        ON startedCourse.Status = \'S\'
        AND completedCourse.Status = \'C\'
        AND startedCourse.Course = completedCourse.Course
WHERE startedCourse.Date = ?
GROUP BY startedCourse.School
    ,        从我的头顶:
select c_started.courseID,c_started.courseDate as StartDate,c_completed.courseDate as CompletedDate,case 
 when c_completed.courseDate IS NULL then \'incomplete\'
 Else \'completed\'
end as courseStatus
from tbCourses as c_started
left join tbCourses as c_completed on c_started.courseID = c_completed.courseID 
and c_started.courseDate < c_completed.courseDate
where c_started.Status = \'S\'
将为您提供以下内容: courseID-StartDate-CompletedDate-courseStatus 路线1-2010-01-12-2010-02-25-完成 course2-2011-01-21-NULL-不完整 course3-2010-10-15-NULL-不完整     ,        这个怎么样:
declare @InputDate datetime = \'20110115\';

with cCourseList as (

select  t1.School,t1.Course,DateStarted = t1.Date,t2.DateCompleted
from    tbl t1
outer apply 
        (select  top(1) DateCompleted = t2.Date
        from    tbl t2
        where   t2.Course = t1.Course
            and t2.Status = \'C\'
        order by t2.Date) t2
where   t1.Status = \'S\'

)

select  cl.School,[Not Completed] = sum(case when cl.DateCompleted is null then 1 else 0 end)
from    cCourseList cl
where   cl.DateStarted <= @InputDate
group by cl.School;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?