没有子查询,带有一个表的两个"where"语句不起作用

Cas*_*y_1 2 sql t-sql sql-server where sql-server-2008

我有一个表3列:name,lastnamedate.

例如:

Name Lastname Date
Ab   Ab       2008-07-01
Ab   Ab       2006-06-23
Kb   Kb       2008-07-01
Kb   Kb       2007-06-03
Run Code Online (Sandbox Code Playgroud)

我需要找到那些谁被分配到的名称2008-07,而不是2006-06.因此,对于此示例,输出将为:

Name Lastname Date
Kb   Kb       2008-07-01
Kb   Kb       2007-06-03
Run Code Online (Sandbox Code Playgroud)

我的代码:

select  Name, Lastname, YEAR(date), MONTH(date) from MyTable
where (YEAR(date) = 2008 AND MONTH(date) = 7) AND (YEAR(date) <> 2006 AND MONTH(date) <> 6)
Run Code Online (Sandbox Code Playgroud)

它不能很好地工作,因为没有任何事情发生(它"阻塞"例如所有名称与月份= 6).我尝试用UNION语句来做,但没有什么效果.

注意,我需要在不使用子查询的情况下执行此操作.

Gor*_*off 5

我想你想要一个group by和一个having子句,因为你正在寻找多行:

select  Name, Lastname
from MyTable
group by Name, LastName
having 
    sum(case when YEAR(date) = 2008 AND MONTH(date) = 7 then 1 else 0 end) > 0 and
    sum(case when YEAR(date) = 2006 AND MONTH(date) = 6 then 1 else 0 end) = 0;
Run Code Online (Sandbox Code Playgroud)

having子句中的每个条件都计算匹配的行数.该> 0装置有至少一个.该= 0方法有没有.这可以很容易地推广到更多条件.