SQL 分组求和+行转列

分组求和+行转列

效果图

1.分组求和
统计每一天,不同物料的销售情况。
请添加图片描述
2.在此基础上,行转列
方便前端折线图赋值
请添加图片描述

语句

分组求和

注意 一定要加入:top 100 percent, 因为这整段的语句中有 order by 语法, 当它作为子查询时,会提示报错:除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

SELECT
top 100 percent
CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ) AS GWTime2,
 MaterialID,
  MaterialDes,
	SUM ( NW ) AS NW,
	BusinessTypeDes
	FROM
	uMsInfo
	LEFT JOIN mdBusinessType on uMsInfo.BusinessTypeID = mdBusinessType.BusinessTypeID
WHERE
	uMsInfo.BusinessTypeID = 2 
	AND GWTime >= '2022-01-18 06:39:35.427' 
	AND GWTime <= '2022-01-20 06:39:35.427' 
	--AND MaterialID ='10011'

GROUP BY CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ),MaterialID,MaterialDes,BusinessTypeDes
ORDER BY CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ),MaterialID,MaterialDes,BusinessTypeDes

行转列

SELECT  
	GWTime2,
	SUM( CASE MaterialDes WHEN '承德铁精粉' THEN NW ELSE 0 END ) '承德铁精粉',
	SUM( CASE MaterialDes WHEN '废渣小料' THEN NW ELSE 0 END ) '废渣小料',
	SUM( CASE MaterialDes WHEN '磷精粉' THEN NW ELSE 0 END ) '磷精粉',
	SUM( CASE MaterialDes WHEN '尾矿渣' THEN NW ELSE 0 END ) '尾矿渣' ,
	BusinessTypeDes
FROM
	(

	//上一步的分组求和语句,作为子查询,记住添加 :top 100 percent
  SELECT
  top 100 percent
  CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ) AS GWTime2,
  MaterialID,
  MaterialDes,
	SUM ( NW ) AS NW,
	BusinessTypeDes
	FROM
	uMsInfo
	LEFT JOIN mdBusinessType on uMsInfo.BusinessTypeID = mdBusinessType.BusinessTypeID
WHERE
	uMsInfo.BusinessTypeID = 2 
	AND GWTime >= '2022-01-18 06:39:35.427' 
	AND GWTime <= '2022-01-20 06:39:35.427' 
	--AND MaterialID ='10011'

GROUP BY CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ),MaterialID,MaterialDes,BusinessTypeDes
ORDER BY CONVERT( VARCHAR ( 10 ), uMsInfo.GWTime, 121 ),MaterialID,MaterialDes,BusinessTypeDes


	)as A
	 
GROUP BY
	GWTime2,BusinessTypeDes

到此基本实现,可以根据自己的情况进行更改。
这里是井队,天高任鸟飞,海阔凭鱼跃,点个关注不迷路,我们下期再见。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,可以使用GROUP BY子句对数据进行分组,并使用聚合函数如SUM()对每个组进行求和。下面是一个示例查询,演示如何使用GROUP BY和SUM()函数进行分组求和: SELECT DeptName, SUM(Salary) AS TotalSalary FROM DeptInfo GROUP BY DeptName; 这个查询将根据DeptName列对数据进行分组,并计算每个组的Salary总和。结果将包含每个部门的名称和对应的总薪水。 如果需要在结果中显示全部的合计和小计,可以使用WITH ROLLUP子句。下面是一个示例查询,演示如何使用WITH ROLLUP和CASE语句进行分组求和,并显示合计和小计: SELECT CASE WHEN GROUPING(DeptName) = 1 THEN '合计' ELSE DeptName END AS DeptName, SUM(Salary) AS TotalSalary FROM DeptInfo GROUP BY DeptName WITH ROLLUP; 这个查询将根据DeptName列对数据进行分组,并计算每个组的Salary总和。使用CASE语句在结果中显示'合计'或部门名称。WITH ROLLUP子句将在结果中添加合计行和小计行,以显示每个部门的总薪水和整个表的总薪水。 请注意,以上示例中的表和列名仅供参考,你需要根据实际情况进行调整。 #### 引用[.reference_title] - *1* [Server SQL 分组后 ,其他字段值相加(...for xml path)](https://blog.csdn.net/hamunet/article/details/110355567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计](https://blog.csdn.net/qq_28256783/article/details/98616741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值