求关于分类查询统计的Sql语句
再做一个物流系统,客户要求单据查询按照目的地分类查询统计出来:
单据表如下: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万条左右,查询起来非常慢,请大虾指点下如何能够快速查询出这种结构的数据表!
[解决办法]
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
/*
NUMFHRSHRADDRAMOUNTFEE
4GH北京250
1AB北京150
NULLNULLNULL合计3100
2CD广州1100
NULLNULLNULL合计1100
3EF上海120
NULLNULLNULL合计120
*/
数据库里我能做到的只有这样了,不知道能否帮到你
[解决办法]
create table bill(单号 int,发货人 varchar(1), 收货人 varchar(1),目的地 varchar(6),件数 int, 运费 int)insert billselect 1 ,'A','B','北京', 1 ,50 union allselect 2 ,'C','D','广州', 1 ,100 union allselect 3 ,'E','F','上海', 1 ,20 union allselect 4 ,'G','H','北京', 2 ,50with 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 cteunion allselect max(单号)+1,null,null,目的地,sum(件数)件数,sum(运费)运费 from cte group by 目的地) tborder by 目的地1,单号1/*单号 发货人 收货人 目的地 件数 运费----------- ---- ---- ------ ----------- -----------1 A B 北京 1 504 G H 北京 2 50NULL NULL NULL 合计 3 1002 C D 广州 1 100NULL NULL NULL 合计 1 1003 E F 上海 1 20NULL NULL NULL 合计 1 20(7 行受影响)*/