• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

请教一个SQL

zedan 2009-04-09 10:52:40
表数据:
a b
1 10
2 20
3 30
4 40
5 50

请帮忙写个SQL,得到表里的数据 b列大于20和大于40的各有多少条数据,即

result:
>20 3
>40 1

先谢谢了。
...全文
93 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ws_hgo 2009-04-09
[Quote=引用 9 楼 zedan 的回复:]
谢谢各位了。

性能方面感觉是不是小梁的较好点?
[/Quote]
是的用小梁的
小梁10分
我8分
呵呵
回复
zedan 2009-04-09
谢谢各位了。

性能方面感觉是不是小梁的较好点?
回复
ws_hgo 2009-04-09
create TABLE #TT (a INT,b INT)
INSERT INTO #TT
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

select sum(case when b>20 then 1 else 0 end) '大于20的',
sum(case when b>40 then 1 else 0 end) '大于40的'
from #TT

大于20的 大于40的
----------- -----------
3 1

(1 行受影响)
回复
ks_reny 2009-04-09
[Quote=引用 1 楼 liangCK 的回复:]
SQL codeSELECT
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM tb
GROUP BY
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END
[/Quote]
小梁真牛,簡單通俗.
回复
Leen_fang 2009-04-09

create table #tb1(a int,b int )
--drop table #tb1
insert into #tb1
select 1,10 union all
select 2,20 union all
select 3,30 union all
select 4,40 union all
select 5,50

--select * from #tb1
select
sum(case when b>20 then 1 else 0 end) as '>20',
sum(case when b>40 then 1 else 0 end) as '>40'
from #tb1
回复
greymouseyu 2009-04-09

SELECT
'>20',count([b])
FROM [test2]
where [b]>20
union all
SELECT
'>40',count([b])
FROM [test2]
where [b]>40
回复
百年树人 2009-04-09
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([a] int,[b] int)
insert [tb]
select 1,10 union all
select 2,20 union all
select 3,30 union all
select 4,40 union all
select 5,50

---查询---
select
'>20',
sum(case when b>20 then 1 else 0 end)
from [tb]
union all
select
'>40',
sum(case when b>40 then 1 else 0 end)
from [tb]


---结果---

---- -----------
>20 3
>40 1

(所影响的行数为 2 行)
回复
shenghong_wu 2009-04-09
select count(*) as result from 表名 where b>20


select count(*) as result from 表名 where b<40
回复
liangCK 2009-04-09
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (a INT,b INT)
INSERT INTO @T
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

--SQL查询如下:

SELECT
CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM @T
GROUP BY
CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END
HAVING CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END IS NOT NULL

回复
you_tube 2009-04-09
select count(1) result from tab where b > 20
union
select count(1) result from tab where b > 40
回复
liangCK 2009-04-09
SELECT
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM tb
GROUP BY
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END
回复
you_tube 2009-04-09
盗用楼上数据
create TABLE #TT (a INT,b INT)
INSERT INTO #TT
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

select case when b>20 then b end '大于20的',
case when b >40 then b end '大于40的'
from #TT
ORDER BY b desc
/*
大于20的 大于40的
----------- -----------
50 50
40 NULL
30 NULL
NULL NULL
NULL NULL*?

(5 行受影响)
回复
zedan 2009-04-09
[Quote=引用 8 楼 ws_hgo 的回复:]
SQL codecreateTABLE#TT (aINT,bINT)INSERTINTO#TTSELECT1,10UNIONALLSELECT2,20UNIONALLSELECT3,30UNIONALLSELECT4,40UNIONALLSELECT5,50selectsum(casewhenb>20then1else0end)'大于20的',sum(casewhenb>40then1else0end)'大于40的'from#TT

大于20的 大于40的----------- -----------31(1行受影响)
[/Quote]

这个的结果是对的,不过要进行--行列转换, 麻烦啊。
回复
zedan 2009-04-09
发现小梁的有点问题,得到的结果是

大于20的 大于40的
----------- -----------
20 50
30
40

而真正要的结果是
大于20的 大于40的
----------- -----------
30 50
40
50
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2009-04-09 10:52
社区公告
暂无公告