合并非重复值到同一行的同时,统计不同特定记录的次数并对费用求和(SQL Server)
先说一下,我用的的是SQL Server 2008 R2
问题如下:
表一共有这样的几列数据:
供应商,执行调度,起运城市,中转城市,目的城市,车型,费率,币种,计费基准
其中,执行调度的值都是人名,费率是numeric类型,其他列都是nvarchar类型,且只有中转城市的部分值是NULL。
如题所示,有三个要求:
1 统计报价的次数。当两条记录的供应商,起运城市,目的城市,车型,费率这五个字段都相同时,它们看成是同一种报价,这里要统计不同报价各自的次数;
2 合并所有的非重复调度。同一种报价的执行调度可能是同一个人,也可能是不同的人,这里要将同一种报价的所有非重复的执行调度合并到同一行中;
3 对同一种报价的所有费求和。
建表语句:
create table temp(
供应商 nvarchar(20),
执行调度 nvarchar(20),
起运城市 nvarchar(20),
中转城市 nvarchar(20),
目的城市 nvarchar(20),
车型 nvarchar(10),
费率 numeric(10,2),
币种 nvarchar(10),
计费基准 nvarchar(12)
)
测试数据:
insert into temp
values
('苏州xxx有限公司','朱均','xx区',NULL,'xx区','FCL 5T',137.00,'RMB','车'),
('苏州xxx有限公司','朱均','xx区',NULL,'xx区','FCL 5T',137.00,'RMB','车'),
('苏州xxx有限公司','陈胜','xx区',NULL,'xx区','FCL 5T',137.00,'RMB','车'),
('上海xxx有限公司','陈xx','yy区','zz区','yy区','FCL 5T',521.00,'RMB','车'),
('上海xxx有限公司','陈xx','yy区','zz区','yy区','FCL 5T',521.00,'RMB','车');
查询结果应该是这样的:
报价次数 总费用 供应商 执行调度 起运城市 中转城市 目的城市 车型 费率 币种 计费基准
3 411 苏州xxx有限公司 陈胜,朱均 xx区 xx区 NULL FCL 5T 137 RMB 车
2 1042 上海xxx有限公司 陈xx yy区 zz区 yy区 FCL 5T 521 RMB 车
我是用把合并的执行调度和统计的报价次数,总费用放到不同的临时表中,最后再合并起来,这种方法实现的上述查询,但是这种方法查询的速度比较慢, 不知道有没有什么别的好方法,哪位可以指点一下?