首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >你能在SQL中使用if-then-else逻辑吗?

你能在SQL中使用if-then-else逻辑吗?
EN

Stack Overflow用户
提问于 2013-02-26 17:54:10
回答 7查看 367.2K关注 0票数 101

我需要根据某种优先级从表中选择数据,如下所示:

代码语言:javascript
复制
select product, price from table1 where project = 1

-- pseudo: if no price found, do this:
select product, price from table1 where customer = 2

-- pseudo: if still no price found, do this:
select product, price from table1 where company = 3

也就是说,如果我发现有3种产品的价格基于project = X,我不想在customer = Y上选择。我只想返回结果3行,然后就完成了。

在SQL中应该如何做这样的事情呢?对伪if语句使用某种CASE语句?做一个工会或其他一些聪明的事情?

编辑:我使用的是MS SQL。

谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-02-26 17:57:37

您可以执行以下sql查询

代码语言:javascript
复制
IF ((SELECT COUNT(*) FROM table1 WHERE project = 1) > 0) 
    SELECT product, price FROM table1 WHERE project = 1
ELSE IF ((SELECT COUNT(*) FROM table1 WHERE project = 2) > 0) 
    SELECT product, price FROM table1 WHERE project = 2
ELSE IF ((SELECT COUNT(*) FROM table1 WHERE project = 3) > 0)
    SELECT product, price FROM table1 WHERE project = 3
票数 109
EN

Stack Overflow用户

发布于 2013-02-26 17:56:43

CASE语句最接近SQL中的IF语句,并且在所有版本的SQL Server上都受支持:

代码语言:javascript
复制
SELECT CASE <variable> 
           WHEN <value>      THEN <returnvalue> 
           WHEN <othervalue> THEN <returnthis> 
           ELSE <returndefaultcase> 
       END 
  FROM <table> 
票数 31
EN

Stack Overflow用户

发布于 2013-02-26 18:00:47

不用使用EXISTSCOUNT,只需使用@@ROWCOUNT

代码语言:javascript
复制
select product, price from table1 where project = 1

IF @@ROWCOUNT = 0
BEGIN
    select product, price from table1 where customer = 2

    IF @@ROWCOUNT = 0
    select product, price from table1 where company = 3
END
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15085990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档