帮忙求一个存储过程

yanwen0206 2012-03-01 01:35:38
18岁以下 18-25岁
0元 ?人 ?人
1-500元 ?人 ?人

-------------------------------------------------

member表
mem_num , birthday

order表
ord_num,mem_num,price
-------------------------------------------------
我想要查出 18岁以下 购买0元的 有多少人
18-25岁 购买1-500元的 有多少人
18岁以下 购买0元的 有多少人
18-25岁 购买1-500元的 有多少人
一起查出来 大家有没有什么好的办法???
...全文
102 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
谢谢 我去研究研究
  • 打赏
  • 举报
回复

/*
18岁以下 18-25岁
0元 ?人 ?人
1-500元 ?人 ?人

-------------------------------------------------

member表
mem_num , birthday

order表
ord_num,mem_num,price
-------------------------------------------------
我想要查出
18岁以下 购买0元的 有多少人
18-25岁 购买1-500元的 有多少人
一起查出来 大家有没有什么好的办法???
*/
go
if OBJECT_ID('member')is not null
drop table member
go
create table member(
mem_num int,
birthday datetime
)
go
insert member
select 1,'1989-10-02' union all
select 2,'1996-11-21' union all
select 3,'1995-09-12' union all
select 4,'1988-12-09'

go
if OBJECT_ID('[order]')is not null
drop table [order]
go
create table [order](
ord_num int,
mem_num int,
price int
)
go
insert [order]
select 1,1,300 union all
select 2,1,50 union all
select 3,2,200 union all
select 4,3,0 union all
select 5,4,1000
go
;with T
as
(
select member.mem_num,
DATEDIFF(YY,birthday,GETDATE()) as age,[order].ord_num,
isnull([order].price,0) as price from member
left join [order] on member.mem_num=[order].mem_num
),
M
AS
(
select case when T.price=0 then 0 when T.price between 1 and 500 then 500 end as 价钱,
sum(case when age<18 then 1 else 0 end) as [18岁以下],
sum(case when age between 18 and 25 then 1 else 0 end) as [18岁到25岁]
from T group by price
),
N
AS
(
select '购买'+CAST(价钱 as varchar)+'元' AS 范围,
SUM(CASE WHEN [18岁以下]=1 THEN 1 ELSE 0 END) AS [18岁以下],
SUM(CASE WHEN [18岁到25岁]=1 THEN 1 ELSE 0 END) AS [18岁到25岁]
from M
group by 价钱
)

SELECT *FROM N WHERE 范围 is not null

/*
范围 18岁以下 18岁到25岁
购买0元 1 0
购买500元 1 2
*/
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yanwen0206 的回复:]

引用 7 楼 travylee 的回复:

给点测试数据

member表
mem_num , birthday
1 1993-1-1
2 1989-1-1
3 1994-1-1
4 1987-1-1

order表
ord_num,mem_num,price
1 1 300
2 1 50
3 2 200
4 3 0
5 4 1000
[/Quote]
18岁以下的 18-25岁
购买0元的 1 0
1-500元 0 2


要得出这样的
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 travylee 的回复:]

给点测试数据
[/Quote]
member表
mem_num , birthday
1 1993-1-1
2 1989-1-1
3 1994-1-1
4 1987-1-1

order表
ord_num,mem_num,price
1 1 300
2 1 50
3 2 200
4 3 0
5 4 1000
  • 打赏
  • 举报
回复
给点测试数据
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anlianganl 的回复:]

做个分组 汇总被
[/Quote] 不太会耶。。
anlianganl 2012-03-01
  • 打赏
  • 举报
回复
做个分组 汇总被
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 travylee 的回复:]

在上课,下课了没人给你解决我可以试试,以前遇到过一个类似问题,你可以先找找这个贴
[/Quote]
好的 谢谢 ^_^
  • 打赏
  • 举报
回复
在上课,下课了没人给你解决我可以试试,以前遇到过一个类似问题,你可以先找找这个贴
yanwen0206 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 travylee 的回复:]

这个可以不用存储过程
[/Quote]
求教 那可以用什么方法? 因为我不想一条条的sql写 因为 后面还有很多 10行10列 就要写100条sql了。。太累
  • 打赏
  • 举报
回复
这个可以不用存储过程

34,591

社区成员

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

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