如何不用union 实现 这条查询的方法
如 男60退休 女50退休 我要查询退休 人员 然不能用union
表如下
name sex age
王一 男 55
王二 女 55
丁一 男 65
丁二 女 40
------解决方案--------------------name sex age
王一 男 55
王二 女 55
丁一 男 65
丁二 女 40
select * from tb where (sex = '男 ' and age > 60) or (sex = '女 ' and age > 55)
------解决方案--------------------没有问题,主要是看你 > '退休年龄 ' 是否传错值了
select * into t1
from (select '王一 ' as [name], '男 ' as [sex],55 as age
union all
select '王二 ', '女 ',55
union all
select '丁一 ', '男 ',65
union all
select '丁二 ', '女 ',40) A
select * from t1
select * , '退休年龄 ' = case when sex= '男 ' then 60 else 50 end
from t1
where age > 50
drop table t1
------解决方案--------------------//测试表
create table t1
(
[name] nvarchar(20),
sex nvarchar(20),
birthday datetime
)
insert into t1
values
(
'王一 ',
'男 ',
'03 31 1952 9:20AM '
)
insert into t1
values
(
'王二 ',
'女 ',
'03 31 1952 9:20AM '
)
insert into t1
values
(
'丁一 ',
'男 ',
'03 31 1942 9:20AM '
)
insert into t1
values
(
'丁二 ',
'女 ',
'03 31 1967 9:20AM '
)
//临时表
create table #t2
(
name nvarchar(20),
sex nvarchar(20),
age int
)
insert into #t2
select name, sex , datediff(yy,birthday,getdate())
from t1
//结果
select * from #t2 where (sex = '男 ' and age > 60) or (sex = '女 ' and age > 50)
------解决方案--------------------select * into t1
from (select '王一 ' as [name], '男 ' as [sex],55 as age
union all
select '王二 ', '女 ',55
union all
select '丁一 ', '男 ',65
union all
select '丁二 ', '女 ',40) A
select * from t1
select * , '退休年龄 ' = case when sex= '男 ' then 60 else 50 end
from t1
where age > (case when sex= '男 ' then 60 else 50 end)
drop table t1