日期:2014-05-18  浏览次数:20704 次

求按条件查找的Sql语句

假设有这样一张表

代码,   姓名,年龄,政治面目,家庭人口数
001       张三     34       群众                 5
002       李四     48       党员                 4
004       王五     61       党员                 6
005       陈酒     21       团员                 4
006       李二     27       党员                 2  

我现在有几个审核公式(可动态添加的),要求找出并标注审核结果;
一、年龄在30及以上;
二、政治面目是党员
三、家庭人口数大于4
如果用程序只能每条的按这种条件检测,但是数据量特别大,速度慢,
如果用SQL怎么做:

根据上表生成审核结果应如下:
代码,   姓名,       结果
001       张三         年龄在30及以上,家庭人口数大于4
002       李四         年龄在30及以上,政治面目是党员
004       王五         年龄在30及以上,政治面目是党员,家庭人口数大于4
006       李二         政治面目是党员

------解决方案--------------------
--建立测试环境
create table #tb(代码 varchar(5),姓名 varchar(5),年龄 int,政治面目 varchar(5),家庭人口数 int)
insert #tb(代码,姓名,年龄,政治面目,家庭人口数)
select '001 ', '张三 ', '34 ', '群众 ', '5 ' union all
select '002 ', '李四 ', '48 ', '党员 ', '4 ' union all
select '004 ', '王五 ', '61 ', '党员 ', '6 ' union all
select '005 ', '陈酒 ', '21 ', '团员 ', '4 ' union all
select '006 ', '李二 ', '27 ', '党员 ', '2 '
go
--执行测试语句
select t.代码,t.姓名,t.年龄,t.政治面目,t.家庭人口数
,case when 年龄 > = 30 then '年龄在30及以上, ' else ' ' end
+case when 家庭人口数 > 4 then '家庭人口数大于4, ' else ' ' end
+case when 政治面目 = '党员 ' then '政治面目是党员, ' else ' ' end as 审核结果
from #tb t
go
--删除测试环境
drop table #tb
go
/*--测试结果
代码 姓名 年龄 政治面目 家庭人口数 审核结果
----- ----- ----------- ----- ----------- ----------------------------------------------
001 张三 34 群众 5 年龄在30及以上,家庭人口数大于4,
002 李四 48 党员 4 年龄在30及以上,政治面目是党员,
004 王五 61 党员 6 年龄在30及以上,家庭人口数大于4,政治面目是党员,
005 陈酒 21 团员 4
006 李二 27 党员 2 政治面目是党员,

(5 row(s) affected)

*/


------解决方案--------------------
create table t1(代码 varchar(8),姓名 varchar(8),年龄 int,政治面目 varchar(8),家庭人口数 int)
insert into t1 select '001 ', '张三 ',34, '群众 ',5
insert into t1 select '002 ', '李四 ',48, '党员 ',4
insert into t1 select '004 ', '王五 ',61, '党员 ',6
insert into t1 select '005 ', '陈酒 ',21, '团员 ',4
insert into t1 select '006 ', '李二 ',27, '党员 ',2
go

--col描述用于与t1匹配的字段名,type描述col对应字段类型,0为字符类型/1为数字类型
--operate描述与条件匹配的类型,0: "= "/1: "> "/2: " < ",根据需求还可以增加
create table t2(code int,col varchar(10),type int,operate int,value varchar(20),[desc] varchar(40))
insert into t2 select 1, '年龄 ' ,1,1, '30