如何在sql server中删除查询中的错误并使用sql查询的概念 [英] how to remove error in query and use concept of sql query in sql server

查看:95
本文介绍了如何在sql server中删除查询中的错误并使用sql查询的概念的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一种情况

一张表是 STUDENT_CRpt

i have one situation
one table is STUDENT_CRpt columns

row_id(identity),
Stu_Id(int),
Stu_Name(varchar),
Class(varchar),
Subject(varchar),
Marks(int)

< br $>


第二个表是 STUDENT_DTL_Crpt 列:



second table is STUDENT_DTL_Crpt columns:

Stu_Id(int),
Class(varchar),
Gender(varchar),
Address(varchar)





现在进入 STUDENT_CRpt 表6行(原始数据)



Now in STUDENT_CRpt table 6 rows (raw data)

1   raam    V     Maths      56
2   Sham    V     Maths      59
3   Sham    V     English    49
4   raam    V     English    56
1   geeta   VI    English    60
1   geeta   VI    science    60





根据这个英文最高分为56分,数学分类为59分和Vi分类为60分/秒


所以我试着跟随查询得到输出像



According to this in english highest marks are 56 and in maths 59 of V class and of vi class 60

so i tried following query to get output like

1   raam    V   Maths      56   59
2   Sham    V   Maths      59   59
3   Sham    V   English    49   56
4   raam    V   English    56   56
1   geeta   VI   English   60   60
1   geeta   VI   science   60   60

此处每行的最后一栏(以粗体显示)是各自各科目的最高分< br $>


i希望你得到我的情景........

所以我用下面的查询



here last column of each row (which is bold) is "highest marks in respective subject of respective class

i hope u got my scenario........
so i used below query

select s.Stu_Name,s.Class,s.Marks,s.Subject ,d.Gender,d.Address,
(select MAX(s.Marks) as ''Highest Marks'' from STUDENT_CRpt  group by s.Subject,s.Class)


 from STUDENT_CRpt s,STUDENT_DTL_Crpt d where s.Stu_ID=d.Stu_ID and s.Class=d.Class group by s.Stu_Name,s.Class,d.Address,d.Gender,s.Subject,s.Marks order by Class





i也需要告知最高分,并且每一行都有相应的课程和科目







但是收到错误



每个GROUP BY表达式必须包含至少一个不是外部引用的列。



i做错了什么..告诉我这样我可以退出这个



问候,

谢谢



i need to tell highest marks too with respective class and subject in each row



but getting an error

Each GROUP BY expression must contain at least one column that is not an outer reference.

i did somewhere wrong ..do tell so that i can get out of this

regards,
thanks

推荐答案

试试这个:

Try this:
SELECT s.Stu_ID, s.Stu_Name, s.Class, MAX(s.Marks) AS 'Highest marks', s.Subject, d.Gender, d.Address
FROM STUDENT_CRpt AS s INNER JOIN  STUDENT_DTL_Crpt AS d ON s.Stu_ID=d.Stu_ID and s.Class=d.Class
GROUP BY s.Stu_ID, s.Stu_Name, s.Class, s.Subject, d.Gender,d.Address 
ORDER BY s.Class, s.Stu_Name







谢谢你的解释;)





在课堂上获得最高分的主题:




Thank you for explanation ;)


To get higest marks in class for subject:

SELECT s.Class, s.Subject, MAX(s.Marks) AS 'Highest marks', 
FROM STUDENT_CRpt AS s
GROUP BY s.Class, s.Subject





为课堂上每位学生获得最高分:



To get highest marks for each student in class for subject:

SELECT s.Stu_ID, s.Stu_Name, s.Class, s.Subject, MAX(s.Marks) AS 'Highest marks'
FROM STUDENT_CRpt AS s
GROUP BY s.Stu_ID, s.Stu_Name, s.Class, s.Subject





为每个学生获得科目和课程的最高分:



To get highest marks for each student for subject and for class:

SELECT t1.*, t2.[Highest marks] AS 'Highest in Class'
FROM (
        --get all students with their marks
	SELECT s.Stu_ID, s.Stu_Name, s.Class, s.Subject, MAX(s.Marks) AS 'Highest marks'
	FROM STUDENT_CRpt AS s
	GROUP BY s.Stu_ID, s.Stu_Name, s.Class, s.Subject
	) AS t1 LEFT JOIN (
                --get highest marks in class
		SELECT s.Class, s.Subject, MAX(s.Marks) AS 'Highest marks', 
		FROM STUDENT_CRpt AS s
		GROUP BY s.Class, s.Subject
		) AS t2 ON t1.Class = t2.Class AND t1.Subject = t2.Subject





注意:未经测试,因为此时我无法访问SQL Server。

我希望它有所帮助。

[/ EDIT]



Note: Not tested, because i haven''t access to SQL Server at this moment.
I hope it help.
[/EDIT]


这篇关于如何在sql server中删除查询中的错误并使用sql查询的概念的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆