2015-07-03 150 views
4

我在写SQL语句时遇到问题。我的第一个问题是:是否可以在select语句内的SQL查询中将下面的if语句作为case语句写入?嵌套case语句sql

如果不是,那么请查看下面的案例声明,并帮助/指导我进入有效格式。非常感谢,非常感谢!

IF (var1 = 1){ 
do this1; 
IF (var 1 = 2){ 
    Do this2; 
    }Else{ 
    do something else1; 
    } 
Else if (Var 1 = 3){ 
    Do this3; 
    }Else{ 
    Do something else2; 
    } 

这是我的案例陈述。我知道它不起作用,因为它不是一个有效的案例陈述。有人可以帮助我将其作为有效的案例陈述。提前致谢。

SELECT 
CASE 
    WHEN apple.type = 1 OR apple.type = 2 
    THEN basket.S1 
    ELSE 
     CASE 
      WHEN apple.type = 0 AND basket.S2 is null 
      THEN basket.S1 
      ELSE basket.S2 
     ELSE 
      CASE 
       WHEN apple.type = 3 and basket.s3 is null 
       THEN basket.S1 
       ELSE basket.S3 
      END 
     END 
    END 
FROM ..... 
WHERE ..... 

回答

2

既然你正在检查nulls和substit如果使用非空值,则可以使用COALESCE function使查询更短。

SELECT 
    CASE 
    WHEN apple.type IN (1, 2) THEN basket.s1 
    WHEN apple.type = 0 THEN COALESCE(basket.s2, basket.s1) 
    WHEN apple.type = 3 THEN COALESCE(basket.s3, basket.s1) 
    END 
FROM ... 
+0

谢谢!这工作就像一个魅力! –

3

我认为你是在你的case语句复杂,看着你的第一个例子中,你case语句应该是相当简单的,

像....

SELECT CASE 
      WHEN @Var1 = 1 THEN 'Something 1' 
      WHEN @Var1 = 2 THEN 'Something 2' 
      WHEN @Var1 = 3 THEN 'Something 3' 
      ELSE 'Something Else' 
     END 
FROM ..... 
WHERE ..... 

你的case语句我们可以写这样的东西吗...

SELECT 
    CASE 
     WHEN apple.[type] IN (1,2) 
     THEN basket.S1 
     WHEN apple.type = 0 AND basket.S2 is null 
     THEN basket.S1 
     WHEN apple.type = 3 and basket.s3 is null 
     THEN basket.S1 
     ELSE basket.S3 
    END 
+0

非常感谢!这也有一点调整。 –