2013-06-19 3 views
4

저는 SO에서 검색했지만 정답을 얻을 수 없습니다.여러 테이블의 데이터를 표시하는 SQL 쿼리

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

다른 테이블

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

sub1, sub2, 주제의 표시를 포함한다. 이제 2 개 이상의 과목에서 35 점 이상인 학생 정보를 표시하는 쿼리를 원하십니까?

+0

에 오신 것을 환영합니다 더 명확 될 것입니다! 가능한 빨리 질문을 형식화하십시오. 이전에 검색을 했으므로 올바른 형식이 어떻게 나타나는지 알아야한다고하셨습니다. 샘플 데이터, 그에 기반한 원하는 출력 및 현재 쿼리 버전을 제공하십시오. – peterm

+0

SQL Server를 사용하고 있습니까? –

+0

다시 2 과목 *에서> 35 점을 얻었음을 나타내는 샘플 데이터를 제공하십시오. 그리고 RDBMS (SQL Server, MySql, Oracle ...)를 사용하고 있습니까? – peterm

답변

2
select rollno, 
case when sub1 < 35 then 0 else 1 end + 
case when sub2 < 35 then 0 else 1 end + 
case when sub3 < 35 then 0 else 1 end + 
case when sub4 < 35 then 0 else 1 end + 
case when sub5 < 35 then 0 else 1 end + 
end 
as [Count] 
from student,marks where count > 2 
-1

내가 너무 코딩에 새로운 오전하지만 u는 이런 식으로 뭔가를 시도하지만 항상 전에 질문을 명확

SELECT student.* from student InnerJoin marks ON studnet.roll_no=marks.student) where (sub1>=35 && sub2>=35 and so on) 
+0

구문이 올바르지 않으며 모든 주제가 35보다 큰 것으로 생각하고 있습니다. 그렇지 않은 경우 –

+0

Thnks 질문에 대한 오해 – Desire

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) 
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) 
1

당신은 CASE WHEN를 사용하여 시도하게하고 합계 수 필드가 35 이상인 필드.

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..

0

마크 테이블을 먼저 표준화 할 수 있습니다!

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

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

이 거의 변화하지 후 상황에 유래에

관련 문제