首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

统计单位,性别,数量,箱数的复杂查询有关问题!

2012-07-23 
统计单位,性别,数量,箱数的复杂查询问题!!一个比较复杂的查询,请高手指点:入下表SQL code单位姓名性别型号

统计单位,性别,数量,箱数的复杂查询问题!!
一个比较复杂的查询,请高手指点:入下表

SQL code
  单位     姓名   性别   型号    数量    箱号  A        张      男     A       2       1  A        王      女     B       2       1  A        刘      男     A       2       2  B        李      男     A       2       3  B        赵      女     C       2       4     要得到的查询结果如下:        单位     男数量    女数量    总数量    箱号范围       A         4          2         6        1-2      B         2          2         4        3-4  


该查询其实不考虑姓名和型号的问题,主要是要区分出男数量,女数量的多少,和箱号范围!
请高手指点!!!!

[解决办法]
SQL code
select 单位,sum(case when 性别='男' then 数量 else 0 end) [男数量],            sum(case when 性别='女' then 数量 else 0 end) [女数量],       sum(数量) [总数量],ltrim(min(箱号))+'-'+ltrim(max(箱号)) [箱号范围]from 表group by 单位
[解决办法]
SQL code
select 单位,sum(case when 性别='男' then 数量 else 0 end) [男数量],            sum(case when 性别='女' then 数量 else 0 end) [女数量],       sum(数量) [总数量],cast((min(箱号) as varchar(10))+'-'+cast((max(箱号)as varchar(10))+ [箱号范围]from 表名group by 单位
[解决办法]
SQL code
create table da(单位 char(1), 姓名 varchar(10), 性别 char(2), 型号 char(1), 数量 int, 箱号 int)insert into daselect 'A', '张', '男', 'A', 2, 1 union allselect 'A', '王', '女', 'B', 2, 1 union allselect 'A', '刘', '男', 'A', 2, 2 union allselect 'B', '李', '男', 'A', 2, 3 union allselect 'B', '赵', '女', 'C', 2, 4select 单位,sum(case when 性别='男' then 1 else 0 end) '男数量',sum(case when 性别='女' then 1 else 0 end) '女数量',count(1) '总数量',rtrim(min(箱号))+'-'+rtrim(max(箱号)) '箱号范围'from da group by 单位/*单位   男数量       女数量       总数量        箱号范围---- ----------- ----------- ----------- -------------------------A      2           1           3           1-2B      1           1           2           3-4(2 row(s) affected)*/
[解决办法]
SQL code
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GOCREATE TABLE [tb]([单位] VARCHAR(1),[姓名] VARCHAR(2),[性别] VARCHAR(2),[型号] VARCHAR(1),[数量] INT,[箱号] INT)INSERT [tb]SELECT 'A','张','男','A',2,1 UNION ALLSELECT 'A','王','女','B',2,1 UNION ALLSELECT 'A','刘','男','A',2,2 UNION ALLSELECT 'B','李','男','A',2,3 UNION ALLSELECT 'B','赵','女','C',2,4GO--> 测试语句:SELECT [单位],sum(case when [性别]='男' then 1 else 0 end) * [数量] as [男数量],sum(case when [性别]='女' then 1 else 0 end) * [数量] as [女数量],count(*)*[数量] as [总数量],ltrim(min([箱号]))+'-'+ltrim(max([箱号])) as [箱号范围]FROM [tb]group by [单位],[数量]/*单位   男数量         女数量         总数量         箱号范围---- ----------- ----------- ----------- -------------------------A    4           2           6           1-2B    2           2           4           3-4(2 行受影响)*/
[解决办法]
SQL code
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GOCREATE TABLE [tb]([单位] VARCHAR(1),[姓名] VARCHAR(2),[性别] VARCHAR(2),[型号] VARCHAR(1),[数量] INT,[箱号] INT)INSERT [tb]SELECT 'A','张','男','A',2,1 UNION ALLSELECT 'A','王','女','B',3,1 UNION ALLSELECT 'A','刘','男','A',2,2 UNION ALLSELECT 'B','李','男','A',2,3 UNION ALLSELECT 'B','赵','女','C',2,4GO--> 测试语句:select [单位],sum([男数量]) as [男数量],sum([女数量]) as [女数量],sum([男数量])+sum([女数量])as [总数量],ltrim(min([箱号]))+'-'+ltrim(max([箱号])) as[箱号范围]from(SELECT [单位],case when [性别]='男' then 1 else 0 end * [数量] as [男数量],case when [性别]='女' then 1 else 0 end * [数量] as [女数量],[数量],[箱号]FROM [tb]--group by [单位],[数量]) tgroup by [单位]/*单位   男数量         女数量         总数量         箱号范围---- ----------- ----------- ----------- -------------------------A    4           2           6           1-2B    2           2           4           3-4(2 行受影响)*/ 


[解决办法]

SQL code
---典型的行转列select 单位,sum(case when 性别='男' then 数量 else 0 end) [男数量],            sum(case when 性别='女' then 数量 else 0 end) [女数量],       sum(数量) [总数量],ltrim(min(箱号))+'-'+ltrim(max(箱号)) [箱号范围]from 表group by 单位 

热点排行