如何申请分组或有其他选择吗?

时间:2014-09-22 11:35:31

标签: sql

这是我的表

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将无效。如何处理?

3 个答案:

答案 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