2013-06-19 53 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 

sub1sub2等包含受試者的標記。現在我想要一個顯示學生信息的查詢,其中超過2個科目的成績超過35分

+0

歡迎的StackOverflow!儘快格式化你的問題。你說過你之前搜索過,所以你必須知道如何適當的格式。除了提供樣本數據,基於它的期望輸出以及您當前的查詢版本。 – 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

我是新編碼過但你可以嘗試這樣的事情,但總是先使問題更加清晰

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) 

你做這個小變化後,事情會變得更加清晰