一个表内分类计数的SQL语句问题

raybvb09 2009-02-04 10:56:27
组名 值一 值二

组一 1 2
组二 3 4
组二 5 6
组三 7 8
组一 9 10
组一 11 12
组二 13 14
组二 15 16
组三 17 18
组一 19 20


给定一个数值范围,求各分组的各个值在此范围中的计数
如给定范围7-15,结果应为:

组名 值一计数 值二计数
组一 2 2
组二 2 1
组三 1 1

求教此SQL语句,谢谢
...全文
195 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raybvb09 2009-02-04
  • 打赏
  • 举报
回复
谢谢大家,又学到东西了
ChinaJiaBing 2009-02-04
  • 打赏
  • 举报
回复

declare @组名 table (组名 nvarchar(10),值一 int,值二 int)
insert into @组名 select '组一',1,2
union all select '组二',3,4
union all select '组二',5,6
union all select '组三',7,8
union all select '组一',9,10
union all select '组一',11,12
union all select '组二',13,14
union all select '组二',15,16
union all select '组三',17,18
union all select '组一',19,20
select a.组名,a.值一,b.值二 from
(select 组名,COUNT(*) as 值一 from @组名 where 值一 between 7 and 15
group by 组名) a,

(select 组名,COUNT(*) 值二 from @组名 where 值二 between 7 and 15
group by 组名) b where a.组名=b.组名
order by b.值二 desc
(10 行受影响)
组名 值一 值二
---------- ----------- -----------
组一 2 2
组二 2 1
组三 1 1

(3 行受影响)

百年树人 2009-02-04
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([组名] varchar(4),[值一] int,[值二] int)
insert [tb]
select '组一',1,2 union all
select '组二',3,4 union all
select '组二',5,6 union all
select '组三',7,8 union all
select '组一',9,10 union all
select '组一',11,12 union all
select '组二',13,14 union all
select '组二',15,16 union all
select '组三',17,18 union all
select '组一',19,20

---查询---
select
[组名],
sum(case when [值一] between 7 and 15 then 1 else 0 end) as [值一计数],
sum(case when [值二] between 7 and 15 then 1 else 0 end) as [值二计数]
from [tb]
group by [组名]
order by [组名]

---结果---
组名 值一计数 值二计数
---- ----------- -----------
组二 2 1
组三 1 1
组一 2 2

(所影响的行数为 3 行)
liangCK 2009-02-04
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (组名 VARCHAR(4),值一 INT,值二 INT)
INSERT INTO @T
SELECT '组一',1,2 UNION ALL
SELECT '组二',3,4 UNION ALL
SELECT '组二',5,6 UNION ALL
SELECT '组三',7,8 UNION ALL
SELECT '组一',9,10 UNION ALL
SELECT '组一',11,12 UNION ALL
SELECT '组二',13,14 UNION ALL
SELECT '组二',15,16 UNION ALL
SELECT '组三',17,18 UNION ALL
SELECT '组一',19,20

--SQL查询如下:

SELECT
组名,
COUNT(CASE WHEN 值一 BETWEEN 7 AND 15 THEN 1 END) AS 值一计数,
COUNT(CASE WHEN 值二 BETWEEN 7 AND 15 THEN 1 END) AS 值二计数
FROM @T
GROUP BY 组名

/*
组名 值一计数 值二计数
---- ----------- -----------
组二 2 1
组三 1 1
组一 2 2

(3 行受影响)
*/
水族杰纶 2009-02-04
  • 打赏
  • 举报
回复
select 组名,count(值一)值一计数,count(值二计数)值二计数 from tb where 值一 between 7 and 15 group by 
组名
Yang_ 2009-02-04
  • 打赏
  • 举报
回复
select 组名
,sum(case when 值一 between 7 and 15 then 1 else 0 end) as 值一计数
,sum(case when 值二 between 7 and 15 then 1 else 0 end) as 值二计数
from tablename
where 值一 between 7 and 15
or 值二 between 7 and 15
group by 组名
liangCK 2009-02-04
  • 打赏
  • 举报
回复
SELECT
组名,
COUNT(CASE WHEN 值一 BETWEEN 7 AND 15 THEN 1 END) AS 值一计数,
COUNT(CASE WHEN 值二 BETWEEN 7 AND 15 THEN 1 END) AS 值二计数
FROM tb
GROUP BY 组名

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧