阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 3090|回复: 1

[原创] SQL2005透视表运算符PIVOT应用示例

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-9 16:57
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2008-7-7 17:54:54 | 显示全部楼层 |阅读模式
    有用SQL写过交叉报表的,往往都比较头痛,还好现在SQL2005中提供了新的PIVOT操作符,可以很简单地写出交叉数据查询。正好前两天在研究ORACLE最新的11G版本提供的新特性,发现ORACLE11G也同样推出这个新PIVOT,而且语法格式也几乎是一样的,呵,看来这些主流的数据库都同质化了,这对我们用户来说,也是一件好事,可以减少学习时间。晕,有点跑题了...
    PIVOT的语法格式可以查询SQL2005的帮助文件,里面有详细说明,这里就不多说,以今天http://bbs.sunwy.org/thread-23185-1-1.html里提到的为例做一下介绍。
    1、首先生成测试数据:
    1. Create TABLE
    2.   T1(Store varchar(20),
    3.      PartNum varchar(10),
    4.      QTY int)
    5. GO
    6. INSERT INTO T1
    7.   SELECT  '成品仓','1001',5 UNION ALL
    8.   SELECT  '成品仓','1002',5 UNION ALL
    9.   SELECT  '成品仓','1003',5 UNION ALL
    10.   SELECT  '成品仓','1004',5 UNION ALL
    11.   SELECT  '原料仓','1001',5 UNION ALL
    12.   SELECT  '原料仓','1002',5 UNION ALL
    13.   SELECT  '原料仓','1003',5 UNION ALL
    14.   SELECT  '销售部','1001',5 UNION ALL
    15.   SELECT  '销售部','1003',5 UNION ALL
    16.   SELECT  '销售部','1004',5
    17. GO
    复制代码

    2、开始查询

    1. SELECT *
    2.   FROM T1 PIVOT (
    3.             SUM(QTY)
    4.    FOR Store IN ([成品仓],[原料仓],[销售部])
    5.     ) as pvt
    6.   ORDER BY PartNum
    复制代码

    生成结果

    PartNum    成品仓         原料仓         销售部
    ---------- ----------- ----------- -----------
    1001       5           5           5
    1002       5           5           NULL
    1003       5           5           5
    1004       5           NULL        5
    (4 行受影响)

    怎么样看到效果了吧,是不是很简单?
    对PVIOT里的参数简单说明一下:
    SUM(QTY):数据项,对数量进行求各,当然也可选择其它聚合函数,如COUNT(QTY)等
    FOR Store IN ([成品仓],[原料仓],[销售部]):指明显示在列区域的字段及相应的取值范围
    AS pvt:指定PVT的表别名,当然也可指定为其它的表别名。

    这里就不往下深入了,有兴趣的可以查询SQL帮助文档或是在网上搜索一下,在此只是做抛砖引玉,给大家一个思路,建议去学习新的数据库平台上提供新的特性来减轻我们的工作量和提高工作效率。

    评分

    参与人数 1阳光币 +2 收起 理由
    qazwsxedc + 2 热心帮助奖励

    查看全部评分

    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    难过
    2017-10-30 09:22
  • 签到天数: 57 天

    [LV.5]常住居民I

    发表于 2008-7-20 16:18:32 | 显示全部楼层
    学习一下.谢谢不错的帖子
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表