SQL通过在同一列上应用两个条件来选择列

时间:2018-05-29 19:51:46

标签: sql

我希望通过在SQL中的另一列上满足两个条件来返回列值。

ORDER | STATUS
--------------
50    |  10
50    |  20
55    |  10
60    |  10
65    |  10
65    |  20

如果状态= 10且状态为!= 20

,我想返回所有订单

结果:

ORDER
-----
 55
 60

我尝试过以下代码,但不起作用:

Select Order 
FROM ordertable OT
where OT.STATUS in ('10') and OT.STATUS not in ('20')

感谢您的帮助。

编辑:谢谢你的回复。让我澄清一下,我的意思是从表中返回整行,其中订单只有status = 10,而不是订单号。为清楚起见,我在示例中省略了其他列。

4 个答案:

答案 0 :(得分:1)

使用EXCEPT

select order from ordertable where status = 10
except
select order from ordertable where status = 20

即。返回状态为10的订单值,状态为20的订单除外。

答案 1 :(得分:1)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>         //put your domain name here
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

答案 2 :(得分:1)

我想你的意思是:

select order_ "Order"
  from ordertable ot
 where ot.status = 10
 minus 
select order_ "Order"
  from ordertable ot
 where ot.status = 20;

或者这个:

select order_ "Order"
  from ordertable ot
 where ( ot.status = 10 ) or ( ot.status != 10 and  ot.status = 20 ) 
 group by order_
having count(1)=1;

根据您的上一条评论,您希望&#34;从订单只有状态= 10&#34;的表中返回整行,然后以下内容最适合:

select order_ "Order"
  from ordertable ot
 group by order_
 having avg(ot.status)=10;

SQL Fiddle Demo(包括三个案例)

P.S。我不知道您在运行此SQL的数据库,但order是一个关键字,不能在其中任何一个中用作列名。

答案 3 :(得分:0)

一种简单的方法是group byhaving

select order
from ordertable
where status in ('10', '20')
group by order
having max(status) = '10';