MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

 

原文出处:[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。

 

 

posted on 2010-12-27 18:02  MIS2000 Lab.  阅读(492)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub