求关于分类查询统计的Sql语句

大嘴鳄 2011-09-01 11:55:38
再做一个物流系统,客户要求单据查询按照目的地分类查询统计出来:
单据表如下:bill
字段: 单号 发货人 收货人 目的地 件数 运费
1 A B 北京 1 50
2 C D 广州 1 100
3 E F 上海 1 20
4 G H 北京 2 50


客户要求按照目的地查询出如下效果的表格:
北京
单号 发货人 收货人 目的地 件数 运费
1 A B 北京 1 50
4 G H 北京 2 50
合计: 3 100
广州
单号 发货人 收货人 目的地 件数 运费
2 C D 广州 1 100
合计: 1 100
上海
单号 发货人 收货人 目的地 件数 运费
3 E F 上海 1 20
合计: 1 20

原来我设计的是先查询目的地,按后按照目的地再查询单据,然后再查询单据的合计值,但该系统是B/s结构纯网页模式,没有分页,而且数据量再10万条左右,查询起来非常慢,请大虾指点下如何能够快速查询出这种结构的数据表!





...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-09-01
  • 打赏
  • 举报
回复
group by xx with rollup
geniuswjt 2011-09-01
  • 打赏
  • 举报
回复
我记得asp的话5000+的显示不出来了,你10W怎么弄- -[Quote=引用楼主 me2008 的回复:]
再做一个物流系统,客户要求单据查询按照目的地分类查询统计出来:
单据表如下:bill
字段: 单号 发货人 收货人 目的地 件数 运费
1 A B 北京 1 50
2 C D 广州 1 100
3 E F 上海 1 20
4 G H 北京 2 50


客户要求按照目的地查询出如下效果的表格:
北京
单号 发货人 收货人 目的地 件数 运费
……
[/Quote]
-晴天 2011-09-01
  • 打赏
  • 举报
回复
把数据查出来以后,到网页上去处理成报表形式.
另外,10万条记录不分页,怎么看?
cd731107 2011-09-01
  • 打赏
  • 举报
回复
数据量太大,肯定要分页的,导出到excl中不分页就可以了,让领导从excl中去看
cd731107 2011-09-01
  • 打赏
  • 举报
回复
create table bill(单号 int,发货人 varchar(1), 收货人 varchar(1),目的地 varchar(6),件数 int, 运费 int)

insert bill
select 1 ,'A','B','北京', 1 ,50 union all
select 2 ,'C','D','广州', 1 ,100 union all
select 3 ,'E','F','上海', 1 ,20 union all
select 4 ,'G','H','北京', 2 ,50


with cte as
(
select 单号,发货人,收货人,目的地,件数,运费 from bill --where 日期 between 日期A and 日期B
)

select case when 发货人 is null then null else 单号1 end as 单号,发货人,收货人,
case when 发货人 is null then '合计' else 目的地1 end as 目的地,件数,运费
from
(select 单号 as 单号1,发货人,收货人,目的地 as 目的地1,件数,运费 from cte
union all
select max(单号)+1,null,null,目的地,sum(件数)件数,sum(运费)运费 from cte group by 目的地) tb
order by 目的地1,单号1

/*
单号 发货人 收货人 目的地 件数 运费
----------- ---- ---- ------ ----------- -----------
1 A B 北京 1 50
4 G H 北京 2 50
NULL NULL NULL 合计 3 100
2 C D 广州 1 100
NULL NULL NULL 合计 1 100
3 E F 上海 1 20
NULL NULL NULL 合计 1 20

(7 行受影响)
*/
大嘴鳄 2011-09-01
  • 打赏
  • 举报
回复
这个在查询的时候会有一个日期范围条件选择,10W条数据时即使是按照日期范围查询也会很慢
tzearlybird 2011-09-01
  • 打赏
  • 举报
回复
统计用sum 。。。 ORDER BY
建议:先建视图,再查询视图
kingc7758258 2011-09-01
  • 打赏
  • 举报
回复
SELECT NUM=1,FHR='A',SHR='B',ADDR='北京',AMOUNT=1,FEE=50
INTO #BILL
UNION
SELECT NUM=2,FHR='C',SHR='D',ADDR='广州',AMOUNT=1,FEE=100
UNION
SELECT NUM=3,FHR='E',SHR='F',ADDR='上海',AMOUNT=1,FEE=20
UNION
SELECT NUM=4,FHR='G',SHR='H',ADDR='北京',AMOUNT=2,FEE=50

SELECT NUM,FHR,SHR,ADDR=(CASE IFSUM WHEN 1 THEN '合计' ELSE ADDR END),AMOUNT,FEE

FROM
(
SELECT *,IFSUM=0 FROM #BILL
UNION ALL
SELECT NULL,NULL,NULL,ADDR,SUM(AMOUNT),SUM(FEE),IFSUM=1
FROM #BILL
GROUP BY ADDR
) X
ORDER BY X.ADDR ASC,X.NUM DESC

/*
NUM FHR SHR ADDR AMOUNT FEE
4 G H 北京 2 50
1 A B 北京 1 50
NULL NULL NULL 合计 3 100
2 C D 广州 1 100
NULL NULL NULL 合计 1 100
3 E F 上海 1 20
NULL NULL NULL 合计 1 20
*/
数据库里我能做到的只有这样了,不知道能否帮到你

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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