1

我已经写了下面的 sql 语句,但是我不确定如何写 where 语句,因为它是有条件的。所以我有:

declare @subject varchar(100)

select surname, forename, result 
from student 
join subject on subject.upn = student.upn 
where...

然后我想写成 sql 是:

where
if subject = 'English' then subject=@subject and KS2en=''
or if subject = 'Maths' then subject = @subject and KS2ma = ''
or if subject <> 'Maths' and <> 'English' then subject = @subject and KS2av = ''

我认为这可以在逻辑上或使用 来完成case,但我现在有点茫然。

以下是表格:

学生

UPN | Surname | Forename | KS2en | KS2Ma | KS2av

主题

UPN | Subject

都是varchar。

4

2 回答 2

1

像下面这样的东西会做到这一点。

SELECT surname,
       forename,
       result
FROM   student
       JOIN subject
         ON subject.upn = student.upn
WHERE  subject.subject = @subject
       AND '' = CASE @subject
                  WHEN 'English' THEN KS2en
                  WHEN 'Maths' THEN KS2ma
                  ELSE KS2av
                END 

我假设subject不可为空。如果是上述查询的语义与您的伪代码略有不同。

于 2013-05-12T20:52:05.157 回答
1

Where限制返回的行数,您希望根据您的条件返回不同的列值。

Where因此,您必须通过以下方式将条件包含到选择中,而不是使用CASE

DECLARE @subject VARCHAR(100) 

SELECT surname, 
       forename, 
       subject=@subject, 
       KS2en=CASE 
               WHEN subject = 'Engish' THEN '' 
               ELSE ks2en 
             END, 
       KS2ma=CASE 
               WHEN subject = 'Maths' THEN '' 
               ELSE ks2ma 
             END, 
       KS2av=CASE 
               WHEN subject NOT IN( 'Maths', 'English' ) THEN '' 
               ELSE ks2av 
             END 
FROM   student 
       JOIN subject 
         ON subject.upn = student.upn 
于 2013-05-12T20:56:50.380 回答