这是我的表
id StudentName SubCode Grade Stdid
3 leena 1 A 1
4 leena 2 A 1
5 leena 3 B 1
1 pinky 1 A 1
2 pinky 2 A 1
8 smita 1 A 1
7 Megha 1 A 2
6 Rupali 1 A 2
等级是从A到DI想要只显示一次当同一个等级的等级相同时,无论什么是子代码和学生名。如果我拿到特定的子代码,它的学生名称应该来。如果等级对于相同的stid是不同的,显示两个记录。我想在这里展示
StdId Studentname Subcode Grade
1 pinky 2 A
1 leena 3 B
2 Rupali 1 A
如果我使用这样的查询:
Select Max(StdId) as stid, Max(SubCode) as SubCode,max(Studentname) as Studentname ,Max(Grade) as Grade
From
Student_Grade
Group By
StdId, Grade
ORDER BY Stdid,grade,Studentname,SubCode
它给了我输出,但这是错误的。
stid SubCode Studentname Grade
1 2 smita A
1 3 leena B
2 1 Rupali A
如果我正在获取smita,smita的子代码值不应该是max.Smita的子代码的值是1。
我认为max应该适用于学生名或子代码而不是两者。如果我申请了一个,group by将无效。如何处理?
答案 0 :(得分:0)
很难理解这个问题,但
Select Max(StdId) .... Group By StdId
绝对不是你需要的东西。悖论:)
按studentName对它们进行分组并汇总其余部分
答案 1 :(得分:0)
您可以尝试按ROW_NUMBER()按记录分组,然后选择所需的数据。
;WITH CteFirstGroup AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Stdid,Grade ORDER BY Stdid,Grade) AS GrpStdIdGrade
FROM (
SELECT id
,StudentName
,SubCode
,Grade
,Stdid
FROM Student_Grade)tbltemp),
--get only distinct records group by Stdid and Grade
SELECT id
,StudentName
,SubCode
,Grade
,Stdid FROM CteFirstGroup
WHERE GrpStdIdGrade = 1;
答案 2 :(得分:-1)
SELECT Stdid as StdId, DISTINCT StudentName as Studentname, MAX(SubCode) as Subcode, Grade
FROM Student_Grade
GROUP BY StudentName