SQLSERVER行列转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | create table test2(id int , name varchar (20),quarter char ,profile1 int ) insert into test2 values (1, 'a' ,1,1000) insert into test2 values (1, 'a' ,2,2000) insert into test2 values (1, 'a' ,3,4000) insert into test2 values (1, 'a' ,4,5000) insert into test2 values (2, 'b' ,1,3000) insert into test2 values (2, 'b' ,2,3500) insert into test2 values (2, 'b' ,3,4200) insert into test2 values (2, 'b' ,4,5500) select * from test2 select id, name , [1] as 一季度, [2] as 二季度, [3] as 三季度, [4] as 四季度 from test2 pivot ( count ([profile1]) for [quarter] in ([1],[2],[3],[4]) ) pvt /* id name quarter profile1 ----------- -------------------- ------- ----------- 1 a 1 1000 1 a 2 2000 1 a 3 4000 1 a 4 5000 2 b 1 3000 2 b 2 3500 2 b 3 4200 2 b 4 5500 (8 行受影响) id name 一季度 二季度 三季度 四季度 ----------- -------------------- ----------- ----------- ----------- ----------- 1 a 1 1 1 1 2 b 1 1 1 1 (2 行受影响) */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | UNPIVOT是列转行,用法如下: 假如表结构如下: /* id name Q1 Q2 Q3 Q4 1 a 1000 2000 4000 5000 2 b 3000 3500 4200 5500 -----------------------------------------------*/ 使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据: select id, name ,quarter,profile from test unpivot ( profile for quarter in ([Q1],[Q2],[Q3],[Q4]) ) as unpvt /* ----------------------------------------------- 得出的结果如下: id name quarter profile 1 a Q1 1000 1 a Q2 2000 1 a Q3 4000 1 a Q4 5000 2 b Q1 3000 2 b Q2 3500 2 b Q3 4200 2 b Q4 5500 */ |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)