原文出处:[SQL指令]使用 PIVOT 和 UNPIVOT,「扭转」查询的结果。
http://www.dotblogs.com.tw/mis2000lab/archive/2010/12/24/ms_sql_pivot_unpivot.aspx
假设我有一个 Table,记录了每一个月、各分店的销售金额(或是销售量)
这样的 数据库 Table如果要作年度的汇总运算,
很可能查出来的结果会是这个样子。
年度 |
销售量 |
2010 |
100,000 |
2009 |
80,000 |
2008 |
50,000 |
毕竟,Table里面的每一列记录,都是横的(一列、一列)
透过 Group by或是 Count()计算之后,成果也必然是这样。
但,有时候要产生这样的报表,就很伤脑筋了。
偏偏大部分的 User满喜欢这种输出成果。
2008 |
2009 |
2010 |
50,000 |
80,000 |
100,000 |
如果您听不懂我的叙述,请看以下的「第一篇 推荐文章(张小呆 的大作)」,有图片解说。
新版本的 MS SQL 2005开始,多了新方法来处理这样「数据表的结果 "逆转"」
简单的说,把原本(上图一)的年度「字段(Column)」,扭转(转向)成一列「资料列 (Row / 一笔纪录)」
原厂的说明文件如下:http://msdn.microsoft.com/zh-tw/library/ms177410.aspx
使用 PIVOT 和 UNPIVOT
您可以使用 PIVOT 和 UNPIVOT 关系运算子,将资料表值表达式变更为另一个数据表。PIVOT 会将表达式内一个数据行中的唯一值转成输出中的多个数据行,以旋转数据表值表达式,然后依据最终输出的需要,对其余的任何数据行值执行必要的汇总。UNPIVOT 执行的作业则与 PIVOT 相反,它会将数据表值表达式旋转为数据行值。
Sorry......上面的说明的确很像火星文
但有三篇文章讲得更浅显易懂(我推荐这三篇文章):
张小呆 http://www.dotblogs.com.tw/dc690216/archive/2010/02/04/13478.aspx......图文并茂,很赞喔!
Rely1020 http://rely1020.blog.ithome.com.tw/post/1606/39111......把语法与理论讲得很清楚。
看完上面两篇文章的解释,您多看一个范例(练习、比对一下),就会懂了。
黑暗执行绪 http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/07/20/tips-using-pivot-in-sql-2005.aspx
如果您不想使用(或是无法使用这种方法的话)
这本书的附录 A也有另外一种解法。请看文章标题 -- 「想把横向列数据改成多栏数据时,该怎么作?」页数533
但我觉得这方法不如PIVOT 和 UNPIVOT好用
书名:SQL语法范例辞典(旗标出版社)
作者:朝井 淳
另外,杨志强老师在 旗标出版社推出的「T-SQL 实战学堂」一书,
里面的 Ch .6-4节(数据合并与转向)也有解说 PIVOT 和 UNPIVOT。
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)

【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析