4

SOで検索しましたが、正解が得られませんでした。

Student
------------------
rollno int PK
name   varchar(20)
class  varchar(20)

もう一つのテーブルは

Marks
-----------------
rollno FK
sub1   int
sub2   int
sub3   int
sub4   int
sub5   int

sub1sub2などには被写体のマークが含まれています。2 つ以上の教科で 35 点を超える学生の情報を表示するクエリが必要ですか?

4

6 に答える 6

1

CASE WHEN35 を超えるフィールドを使用して合計できます。

SELECT s.rollno, s.name, s.class
FROM Student s join Marks m on (s.rollno = m.rollno)
where (CASE WHEN sub1>35 THEN 1 ELSE 0 END +
   CASE WHEN sub2>35 THEN 1 ELSE 0 END +
   CASE WHEN sub3>35 THEN 1 ELSE 0 END +
   CASE WHEN sub4>35 THEN 1 ELSE 0 END +
   CASE WHEN sub5>35 THEN 1 ELSE 0 END) > 2;

ここから確認できますSQL Fiddle..

于 2013-07-03T06:33:43.343 に答える
0
DECLARE @tempRollnoTable(rno int)

INSERT INTO @tempRollnoTable
SELECT rollno FROM marks
WHERE sub1 > 35

UNION ALL

SELECT rollno FROM marks
WHERE sub2 > 35

UNION ALL

SELECT rollno FROM marks
WHERE sub3 > 35

UNION ALL

SELECT rollno FROM marks
WHERE sub4 > 35

UNION ALL

SELECT rollno FROM marks
WHERE sub5 > 35



SELECT * FROM student
WHERE rollno IN ( SELECT rno FROM @tempRollnoTable 
                  GROUP BY rno HAVING COUNT(*) > 2 )
于 2013-06-19T06:03:07.713 に答える
0

これを試して

 select student.* from student inner join marks on student.rollno= marks.rollno 
     where marks.rollno in(
      Select a.* from (
        Select RollNo from marks where sub1>35
        Union ALL
        Select RollNo from marks where sub2>35
        Union ALL
        Select RollNo from marks where sub3>35
        Union ALL
        Select RollNo from marks where sub4>35
        Union ALL
        Select RollNo from marks where sub5>35) a 
       having(rollno)>1)
于 2013-06-19T06:34:17.987 に答える
0

あなたのマークテーブルは最初に正規化することができます!

Marks
-----------------
rollno       int
Subject_ID   int --( FK )
Subject_Val  int

Subjects
-----------------
ID             int
Subject_Name   varcahar(20)

この小さな変更を行うと、物事がより明確になります

于 2013-07-03T07:09:42.513 に答える