Cas*_*y_1 2 sql t-sql sql-server where sql-server-2008
我有一个表3列:name,lastname和date.
例如:
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语句来做,但没有什么效果.
注意,我需要在不使用子查询的情况下执行此操作.
我想你想要一个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方法有没有.这可以很容易地推广到更多条件.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |