SQL使用另一列计数列

时间:2014-04-14 04:12:58

标签: sql sql-server

我的指示是:“打印教师的有序列表和他们分配给学生的A的数量。按照A的数量(从最低到最高)排序输出,并忽略没有指定A的教师”

这就是我所拥有的(http://pastebin.com/pKwc6cSK):

Use Student_Course59
SELECT INSTRUCTOR
FROM Section RIGHT OUTER JOIN Grade_report
ON Section.SECTION_ID = Grade_report.SECTION_ID
WHERE GRADE IS NOT NULL
AND INSTRUCTOR IS NOT NULL

以下是我的表格:

我无法弄清楚如何计算特定教练分配的A数。 非常感谢!!

2 个答案:

答案 0 :(得分:0)

我认为您应该使用此查询来查找已分配的特定教师。

SELECT INSTRUCTOR FROM Section 
RIGHT OUTER JOIN Grade_report 
ON Section.SECTION_ID = Grade_report.SECTION_ID 
WHERE Grade_report.GRADE IS NOT NULL AND 
Section.INSTRUCTOR IS NOT NULL

答案 1 :(得分:0)

从屏幕截图看,您似乎正在运行SQL Server版本。如果这是SQL Server 2005或更高版本,您现在可以使用SUM作为“窗口函数”,这意味着它可以采用OVER(PARTITION BY)意味着这样的东西可能有效:

请注意,语法取自您的示例,但如果您提供了一个小提琴示例,那么它会更好用:)

SELECT  DISTINCT INSTRUCTOR, SUM(CASE WHEN Grade = 'A' THEN 1 ELSE 0 END) OVER (PARTITION BY INSTRUCTOR) AS SUM
FROM    Section
LEFT JOIN Grade_report ON Section.SECTION_ID = Grade_report.SECTION_ID
WHERE INSTRUCTOR IS NOT NULL

请注意,我不知道您的成绩如何表示,因此“A”的值当然可能不同。

它正在做的是选择所有教师及其成绩。当等级为'A'时,它将分配1,否则为0,然后它将它们“按”分区“(基本上是分组)教师

使用SQL Server中的OVER(PARTITION BY)可以解决很多问题,所以即使我的语法不正确,也可以尝试查看窗口函数,看看它们是否无法帮助你。