日期:2014-05-18 浏览次数:20483 次
单位 姓名 性别 型号 数量 箱号 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
select 单位,sum(case when 性别='男' then 数量 else 0 end) [男数量], sum(case when 性别='女' then 数量 else 0 end) [女数量], sum(数量) [总数量],ltrim(min(箱号))+'-'+ltrim(max(箱号)) [箱号范围] from 表 group by 单位
------解决方案--------------------
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 单位
------解决方案--------------------
create table da (单位 char(1), 姓名 varchar(10), 性别 char(2), 型号 char(1), 数量 int, 箱号 int) insert into da select 'A', '张', '男', 'A', 2, 1 union all select 'A', '王', '女', 'B', 2, 1 union all select 'A', '刘', '男', 'A', 2, 2 union all select 'B', '李', '男', 'A', 2, 3 union all select 'B', '赵', '女', 'C', 2, 4 select 单位, 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-2 B 1 1 2 3-4 (2 row(s) affected) */
------解决方案--------------------
--> 测试数据:[tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb]([单位] VARCHAR(1),[姓名] VARCHAR(2),[性别] VARCHAR(2),[型号] VARCHAR(1),[数量] INT,[箱号] INT) INSERT [tb] SELECT 'A','张','男','A',2,1 UNION ALL SELECT 'A','王','女','B',2,1 UNION ALL SELECT 'A','刘','男','A',2,2 UNION ALL SELECT 'B','李','男','A',2,3 UNION ALL SELECT 'B','赵','女','C',2,4 GO --> 测试语句: 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-2 B 2 2 4 3-4 (2 行受影响) */
------解决方案--------------------
--> 测试数据:[tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb]([单位] VARCHAR(1),[姓名] VARCHAR(2),[性别] VARCHAR(2),[型号] VARCHAR(1),[数量] INT,[箱号] INT) INSERT [tb] SELECT 'A','张','男','A',2,1 UNION ALL SELECT 'A','王','女','B',3,1 UNION ALL SELECT 'A','刘','男','A',2,2 UNION ALL SELECT 'B','李','男','A',2,3 UNION ALL SELECT 'B','赵','女','C',2,4 GO --> 测试语句: 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 [单位],[数量] ) t group by [单位] /* 单位 男数量 女数量 总数量 箱号范围 ---- ----------- ----------- ----------- ------------------------- A 4 2 6