SQLServer初学题目:占比问题!!!!急求

拔丝艾伦 2020-03-14 03:44:06
用到了我们初学的一个数据库dbo.northwind
统计每一年,各运货商运货量占比
这个是我写的查出没个运货商每年的货运量的语句

像这样找出运货商对应的运货量之后,就不晓得该咋整了,怎么弄才能完成题目要求的样子呢??
求各位大佬指教!!!!!
...全文
372 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
拔丝艾伦 2020-03-16
  • 打赏
  • 举报
回复
最后解决问题的代码:
WITH 
AKB1 AS 
    (SELECT YEAR(订单.订购日期)   AS 年份,运货商.公司名称,COUNT(订单.发货日期)  AS 运货量
    FROM   订单,运货商 where 运货商.运货商ID = 订单.运货商
    GROUP BY 运货商.公司名称,YEAR(订单.订购日期)),
           
AKB2 AS 
    (SELECT 年份,SUM(运货量) AS 总运货量 
    FROM AKB1
    GROUP BY 年份),
    
AKB3 AS
	(SELECT A.年份 as 年份,
    A.公司名称 as 运货商,
    A.运货量*100.0/B.总运货量 AS 占比 
FROM AKB1 AS A INNER JOIN AKB2 AS B ON A.年份=B.年份)

SELECT * FROM AKB3 AS C
PIVOT ( SUM(C.占比) FOR C.年份 IN([1996],[1997],[1998]) ) TBL
拔丝艾伦 2020-03-16
  • 打赏
  • 举报
回复
谢谢哦!问题解决了!!!
引用 6 楼 吉普赛的歌 的回复:
;WITH cte AS (
	SELECT YEAR(订单.订购日期)   AS 年份,
		   运货商.公司名称,
		   COUNT(订单.发货日期)  AS 运货量
	FROM   订单
		   INNER JOIN 运货商
				ON  运货商.运货商ID = 订单.运货商
	GROUP BY
		   运货商.公司名称,
		   YEAR(订单.订购日期)
),cte2 AS (
	SELECT 年份,SUM(运货量) AS 总运货量 
	FROM cte
	GROUP BY 年份
)
SELECT A.年份
	,A.公司名称
	,A.运货量
	,A.运货量*100.0/B.总运货量 AS 占比 
FROM cte AS A INNER JOIN cte2 AS B ON A.年份=B.年份
拔丝艾伦 2020-03-15
  • 打赏
  • 举报
回复
[quote=引用 6 楼 吉普赛的歌 的回复:]
你好呀,这个问题可以帮我也一起解决一下嘛?
https://bbs.csdn.net/topics/396124181
拔丝艾伦 2020-03-14
  • 打赏
  • 举报
回复
引用 6 楼 吉普赛的歌 的回复:
;WITH cte AS (
SELECT YEAR(订单.订购日期) AS 年份,
运货商.公司名称,
COUNT(订单.发货日期) AS 运货量
FROM 订单
INNER JOIN 运货商
ON 运货商.运货商ID = 订单.运货商
GROUP BY
运货商.公司名称,
YEAR(订单.订购日期)
),cte2 AS (
SELECT 年份,SUM(运货量) AS 总运货量
FROM cte
GROUP BY 年份
)
SELECT A.年份
,A.公司名称
,A.运货量
,A.运货量*100.0/B.总运货量 AS 占比
FROM cte AS A INNER JOIN cte2 AS B ON A.年份=B.年份

好的!!解决了问题,不过如果我想变成这种格式的呢?

公司名称 1996 1997 1998
急速快递
联邦货运
统一包裹
吉普赛的歌 版主 2020-03-14
  • 打赏
  • 举报
回复
;WITH cte AS (
	SELECT YEAR(订单.订购日期)   AS 年份,
		   运货商.公司名称,
		   COUNT(订单.发货日期)  AS 运货量
	FROM   订单
		   INNER JOIN 运货商
				ON  运货商.运货商ID = 订单.运货商
	GROUP BY
		   运货商.公司名称,
		   YEAR(订单.订购日期)
),cte2 AS (
	SELECT 年份,SUM(运货量) AS 总运货量 
	FROM cte
	GROUP BY 年份
)
SELECT A.年份
	,A.公司名称
	,A.运货量
	,A.运货量*100.0/B.总运货量 AS 占比 
FROM cte AS A INNER JOIN cte2 AS B ON A.年份=B.年份
拔丝艾伦 2020-03-14
  • 打赏
  • 举报
回复
引用 3 楼 morliz子轩 的回复:
思路有问题。 先不着急求出【各公司各年货运量】 而是先计算出【各年总货运量】 用【各公司各年货运量】/【各年总货运量】,就是要的占比。
还是想请教一下怎样简单的就可以实现这个思路~~
拔丝艾伦 2020-03-14
  • 打赏
  • 举报
回复
就是具体的语句掌握不够,不晓得咋个操作,还请大佬指点!!! 如何简单方便的算出【各年总货运量】之后 再结合【各公司各年货运量】来算占比
morliz子轩 2020-03-14
  • 打赏
  • 举报
回复
思路有问题。 先不着急求出【各公司各年货运量】 而是先计算出【各年总货运量】 用【各公司各年货运量】/【各年总货运量】,就是要的占比。
拔丝艾伦 2020-03-14
  • 打赏
  • 举报
回复
SELECT Year(订单.订购日期) AS 年份,运货商.公司名称 ,COUNT(订单.发货日期) as 运货量
FROM 订单 INNER JOIN 运货商 ON 运货商.运货商ID = 订单.运货商
GROUP BY 运货商.公司名称,Year(订单.订购日期)
吉普赛的歌 版主 2020-03-14
  • 打赏
  • 举报
回复
贴一下原始sql文本吧, 不要截图,方便帮你修改。

34,590

社区成员

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

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