惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

博客园 - 老飞飞

sql查找带百分号的数据 Jquery - 添加属性、添加class、添加Css 加载数据提示Min(5) must be less than or equal to max(-1) in Range object C# 中文件Stream转换成byte[]时候的一个注意事项 sql server的一个BUG? Js中日期处理的问题 SQL的经验教训 excle 分数排名 要听老人言,金钱用decimal RFC的表结构前面字段修改之后,持续执行的外围代码需要重启 找到子表中超过500条记录的数据 找到了一个动态调整css的方法 Sql必会-求用户连续登录天数 easyui gridview中toolbar中按钮的显示与否 excel 2024的一个奇怪问题 乱七八糟的东西 [转]the collation conflict between "chinese_prc_ci_as" and "sql_latin1_general_cp1_ci_as" in the equal to operation Json中的字串为json文字的返回方法 关于C#中目录的一个小问题 A页面即时传值给B页面 NPOI设定某个格子的样式
列轉行,再行轉列
老飞飞 · 2025-09-18 · via 博客园 - 老飞飞

drop table if exists #t1
select a.BusinessId,a.MRPTime,b.PartNo,c.Type,c.WeekSeq,c.ValueA,c.ValueB,c.ValueC,c.ValueD
into #t1
from CTB_Master a with(nolock) left join CTB_MaterialInfo b with(nolock) on a.BusinessId=b.BusinessId
left join CTB_DateValue c with(nolock) on b.InfoId=c.InfoId
where PlantNo='P112' and VendorCode='C617986201' and a.MRPTime>'2025-04-21'

drop table if exists #t2
select * into #t2 from #t1
unpivot (val for ValueType in (ValueA,ValueB,ValueC,ValueD)) as u

drop table if exists #t3
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX);
select weekseq into #t3 from (SELECT DISTINCT WeekSeq FROM #t2 ) b order by weekseq

SELECT @cols = COALESCE(@cols + ',','') + QUOTENAME(WeekSeq)
FROM #t3 AS WeekSeq;

SET @sql = 'SELECT BusinessId,MRPTime,PartNo,ValueType ' + @cols + ' FROM
(SELECT BusinessId, MRPTime, PartNo,ValueType,val,weekseq FROM #t2) x
PIVOT
(SUM(val) FOR weekseq IN (' + @cols + ')) p ';

--print @sql

EXEC sp_executesql @sql;

 注意事项: 

1)unpivot /PIVOT 前面的select中一定要将转换的行或列包含在里面.(列转行的时候我尝试了多次);

2)for IN中间的部分  行转列 和 列转行 是不同的. 行转列为需要转的栏位名[unpivot (val for ValueType in (ValueA,ValueB,ValueC,ValueD)],

   列转行为转出来的栏位名.[PIVOT (SUM(val) FOR weekseq IN (' + @cols + ')];

3) IN里面的部分基本相同,为转置的栏位名