分享实例------SQL实现行转列再加合计列
这是自己写的一个真实需求,根据生产入库单的物料辅助属性按时间统计,日期由行转列并完成统计数;
点赞+收藏不会迷路!!!
CREATE PROCEDURE [dbo].[DB_PRO_HJTJ] ---创建存储过程
---定义两个变量用来作为查询条件
@BEGDATE date,
@ENDDATE date
AS
Begin
Set NoCount On
--创建临时表
Create table #RZLBHJBZTJB (名称Varchar(500),重量 decimal(28, 4),日期 Varchar(7))
--插入数据
Insert into #RZLBHJBZTJB (名称,重量,日期)
select ts.FNUMBER,SUM(ic.FREALQTY) FREALQTY,CONVERT(varchar(7),i.FDate, 120) FDate
from T_PRD_INSTOCK i inner join
T_PRD_INSTOCKEntry ic on i.FID=ic.FID inner join
T_BD_FLEXSITEMDETAILV TV ON IC.FAUXPROPID=TV.FID INNER JOIN
abc_t_Cust100016 ts on TS.FID=TV.FF100006
WHERE i.FDATE>=@BEGDATE and i.FDATE<=@ENDDATE --用replace转换成两位数
group by TS.FNUMBER,FDate
ORDER BY TS.FNUMBER
declare @Cols NVARCHAR(max);
declare @sql NVARCHAR(max)
SELECT @Cols = stuff((select distinct ', '+QUOTENAME(Rtrim([日期])) from #RZLBHJBZTJB
WHERE 日期>=CONVERT(varchar(7),@BEGDATE, 120) and 日期<=CONVERT(varchar(7),@ENDDATE, 120) for xml path(''),TYPE).value('.','NVARCHAR(MAX)'), 1, 2,'')
set @sql = '
SELECT 合金, '+@Cols+', 总重量
FROM (SELECT 总重量 = Sum(重量)OVER(partition BY 名称),*
FROM #RZLBHJBZTJB) R
PIVOT ( Sum(重量) FOR [日期] IN ('+@Cols+') ) pvt '
EXECUTE sp_executesql @Sql
Drop table #RZLBHJBZTJB Set NoCount Off
END
GO
--执行存储过程
EXEC ZJX_PRO_HJTJ @BEGDATE ='2023-01-01',@EndDate='2023-06-30'
以下是效果图:
这怎么解决,我这是移动sql报表
透视表可以搞定
分享实例------SQL实现行转列再加合计列
本文2024-09-16 17:09:39发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-13914.html