路明非的小跟班 2022-03-20 01:16 采纳率: 71.4%
浏览 18
已结题

SQLserver中,AS RESULT(TNAME,C#,AVG_SCORE)AS X报错为啥??

做一个数据库操作
sqlserver2019版本

想要实现这个语句,检索所授课程平均成绩均大于80分的教师姓名。
SELECT DISTINCT TNAME
FROM (SELECT TNAME,C.C#,AVG(SCORE)
FROM T,C,SC
WHERE T.T#=C.T# AND C.C#=SC.C#
GROUP BY TNAME,C.C#)AS RESULT(TNAME,C#,AVG_SCORE)AS X
WHERE 80<=ALL(SELECT AVG_SCORE
FROM RESULT AS Y
WHERE Y.TNAME=X.TNAME);
结果显示AS附近有语法错误,即GROUP BY TNAME,C.C#)AS RESULT(TNAME,C#,AVG_SCORE)AS X,后面的这个AS,求大家帮忙解决一下!!~~

img

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-20 11:03
    关注
    1. 没有 "as RESULT as X" 这种语法,一个子查询只能有一个别名
    2. 最后面的这个子查询也不对,你没有定义一个全局的RESULT,所以最后的RESULT是无效的。

    如果要对同一个子查询别名引用两次以上,应该使用with as
    另外,要实现你题目中的要求,其实没必要写得这么麻烦,判断课程数量是否和满足80分以上的课程数量一致就行了

    select TNAME from (
    SELECT TNAME,C.C#,
    case when AVG(SCORE) >=80 then 1 end s
    FROM T,C,SC
    WHERE T.T#=C.T# AND C.C#=SC.C#
    GROUP BY TNAME,C.C#) as x 
    group by TNAME having count(1)=count(s)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月20日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?