当前位置: 代码迷 >> Sql Server >> 一张表里,不同条件,同时出现结果()
  详细解决方案

一张表里,不同条件,同时出现结果()

热度:37   发布时间:2016-04-27 21:23:27.0
一张表里,不同条件,同时出现结果(在线等)
我有一张   SERV   表,里面有area_code的字段,area_code有3个值,分别为0790,0791,0792
如果我单独求area_code=0790   时的记录条数
就应该是
select   count(*)   from   serv   where   area_code=0790

但,我有什么办法,能运行一次,就能同时得到  
area_code=0790   的记录条数
area_code=0791   的记录条数
area_code=0792   的记录条数

跪求................

------解决方案--------------------
如果只需要输出一条记录的话
select sum(case when area_code= '0790 ' then 1 else 0 end) as [0790],
sum(case when area_code= '0791 ' then 1 else 0 end) as [0791],
sum(case when area_code= '0792 ' then 1 else 0 end) as [0792]
from serv
------解决方案--------------------
select sum(case when area_code= '0790 ' then 1 else 0 end) as [0790],
sum(case when area_code= '0791 ' then 1 else 0 end) as [0791],
sum(case when area_code= '0792 ' then 1 else 0 end) as [0792]
from serv a where exists(select 1 from dj where area_code=a.area_code and serv_state= 'F1R ')
------解决方案--------------------
--我写了个实例,你看一下吧.

--表名 SERV 字段 area_code (0790,0791,0792)

--表名 dj 字段 serv_state (F1R 和F1A)


create table SERV
(
area_code char(4)
)


select * from SERV

insert into serv
select '0790 ' union all
select '0791 ' union all
select '0792 '

create table dj
(
area_code char(4),
serv_state char(3)
)

insert into dj (area_code,serv_state)
select '0790 ', 'F1R ' union all
select '0790 ', 'F1A ' union all
select '0791 ', 'F1A ' union all
select '0792 ', 'F1A ' union all
select '0793 ', 'F1A ' union all
select '0791 ', 'F1R ' union all
select '0792 ', 'F1R ' union all
select '0793 ', 'F1R ' union all
select '0790 ', 'F1R '

select *
from dj

-------------

--生成临时表
select distinct area_code into # from dj where serv_state= 'F1A '

select * from #

--最终结果
select sum(case when a.area_code= '0790 ' then 1 else 0 end) as [0790],
sum(case when a.area_code= '0791 ' then 1 else 0 end) as [0791],
sum(case when a.area_code= '0792 ' then 1 else 0 end) as [0792]
from serv a left join # b on (a.area_code=b.area_code)



------解决方案--------------------
Select * from (
select area_code,count(area_code) as number from group by area_code) T
where t.rea_code in ( '0790 ', '0791 ', '0792 ')
------解决方案--------------------
SELECT area_code,COUNT(area_code) FROM SERV GROUP By area_code
  相关解决方案