日期:2014-05-18 浏览次数:20596 次
单位 姓名 性别 型号 数量 箱号
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