合并非重复值到同一行的同时,统计不同特定记录的次数并对费用求和(SQL Server)

Backcanhave7 2019-11-29 04:03:01
先说一下,我用的的是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 车

我是用把合并的执行调度和统计的报价次数,总费用放到不同的临时表中,最后再合并起来,这种方法实现的上述查询,但是这种方法查询的速度比较慢, 不知道有没有什么别的好方法,哪位可以指点一下?





...全文
133 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Backcanhave7 2019-11-30
  • 打赏
  • 举报
回复
引用 2 楼 RINK_1 的回复:

SELECT 供应商,起运城市,目的城市,车型,费率,COUNT(*) AS 次数,COUNT(*)*费率 AS 费用总和,
STUFF((SELECT DISTINCT ','+执行调度 FROM TEMP WHERE 供应商=A.供应商 AND 起运城市=A.起运城市 AND 目的城市=A.目的城市 AND 车型=A.车型 AND 费率=A.费率 FOR XML PATH('')) ,1,1,'')
FROM TEMP A
GROUP BY 供应商,起运城市,目的城市,车型,费率


感谢!
RINK_1 2019-11-29
  • 打赏
  • 举报
回复

SELECT 供应商,起运城市,目的城市,车型,费率,COUNT(*) AS 次数,COUNT(*)*费率 AS 费用总和,
STUFF((SELECT DISTINCT ','+执行调度 FROM TEMP WHERE 供应商=A.供应商 AND 起运城市=A.起运城市 AND 目的城市=A.目的城市 AND 车型=A.车型 AND 费率=A.费率 FOR XML PATH('')) ,1,1,'')
FROM TEMP A
GROUP BY 供应商,起运城市,目的城市,车型,费率
Backcanhave7 2019-11-29
  • 打赏
  • 举报
回复


文字描述的查询结果乱了,传张查询结果图

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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