SQL - where语句条件

时间:2018-03-21 19:50:43

标签: sql where case-when

以下是我的查询,我对sql相当新,所以我的理解不是最好的。我希望我的查询结果只给出我在'where'语句中指定的名称。在我的查询下面有4个活动名称,1个团队名称和1个日期范围(3个不同的列,4个活动在“名称”列中找到)。它必须符合所有这些条件。

我的查询一直工作到我在'where'语句中指定的第二个名称。

查询:

SELECT *

FROM databse1.dbo.table1

where team_name = 'CTM Tier 2'
        and date >= '2018-02-01' and date <= '2018-02-28'
        and name = 'Post Vet 460' 
        and name = 'Post Vet CA Complex'
        and name = 'Post Vet CA Standard'
        and name = 'Post Vet CAA'

查询运行良好,直到(并且名称='Post Vet 460'),但如果我作为一个整体运行查询,它会给我空白结果。在这种情况下我是否应该使用一个案例,所有的建议和提示都非常感谢!

4 个答案:

答案 0 :(得分:3)

它不能同时出现,所以请使用in运算符

and name in ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA')

答案 1 :(得分:1)

我想你想要IN

select t1.*
from databse1.dbo.table1 t1
where team_name = 'CTM Tier 2' and
      date >= '2018-02-01' and date <= '2018-02-28' and
      name in ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA');

您的查询不返回任何内容,因为name相同的行上不能包含不同的值。

您可能还需要like,具体取决于您的数据:

select t1.*
from databse1.dbo.table1 t1
where team_name = 'CTM Tier 2' and
      date >= '2018-02-01' and date <= '2018-02-28' and
      name like 'Post Vet %'

答案 2 :(得分:0)

现在尝试这个查询! 你需要找到任何一个具有这些名称之一的行。所以需要使用OR条件。

SELECT *

FROM databse1.dbo.table1

where team_name = 'CTM Tier 2'
        and date >= '2018-02-01' and date <= '2018-02-28'
        and 
        (   name = 'Post Vet 460' 
        or  name = 'Post Vet CA Complex'
        or  name = 'Post Vet CA Standard'
        or  name = 'Post Vet CAA'
        )

答案 3 :(得分:0)

您遇到的问题是因为您使用的是AND运营商。

您应该使用OR运算符。

这是正确的实施方式:

WHERE team_name = 'CTM Tier 2'
        AND date >= '2018-02-01' AND date <= '2018-02-28'
        AND name = 'Post Vet 460' 
        OR name = 'Post Vet CA Complex'
        OR name = 'Post Vet CA Standard'
        OR name = 'Post Vet CAA'

正如其他人所指出的,您也可以使用IN

WHERE team_name = 'CTM Tier 2'
        AND date >= '2018-02-01' AND date <= '2018-02-28'
        AND name IN ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA')

如果您想详细了解IN以及与ORhave a look here的差异。