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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

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

[转帖] SQL2000和2005下行列转换实例

[复制链接]
  • TA的每日心情
    开心
    2014-11-19 12:45
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2009-2-9 12:31:24 | 显示全部楼层 |阅读模式
    SQL2000和2005下行列转换实例
    SQL中行列转换的典型问题,上网找了些提供给大家,陆续还会有一些SQL方面的东西,大家一起共享一起进步一起发达,哈哈哈
    1.创建 学生成绩表
    2.填充 部分数据
    3.一般的直接查询
    4.Sql 2000 下 行列转换
    5.Sql 2005 下 PIVOT
    ------------
    --创建 学生成绩表
    CREATE TABLE [StuSources] (
    [StuID] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [StuName] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [KeCheng] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ChengJi] [float] NOT NULL
    ) ON [PRIMARY]
    --填充 部分数据
    INSERT INTO StuSources
    SELECT '001','张三','语文',81
    UNION SELECT '001','张三','数学',71
    UNION SELECT '001','张三','历史',71
    UNION SELECT '002','李四','语文',82
    UNION SELECT '002','李四','数学',72
    UNION SELECT '002','李四','历史',72
    -- 一般的直接查询
    SELECT * FROM StuSources
    -- 结果
    StuID StuName KeCheng ChengJi
    001     张三     历史     71.0
    001     张三     数学     71.0
    001     张三     语文     81.0
    002     李四     历史     72.0
    002     李四     数学     72.0
    002     李四     语文     82.0
    -- Sql 2000 下 行列转换
    SELECT StuName,
    '语文' = Sum(Case KeCheng WHEN '语文' THEN ChengJi ELSE 0 END ) ,
    '数学' = Sum(Case KeCheng WHEN '数学' THEN ChengJi ELSE 0 END ),
    '历史' = Sum(Case KeCheng WHEN '历史' THEN ChengJi ELSE 0 END )
    FROM StuSources
    GROUP BY StuName
    -- 结果
    StuName 语文 数学 历史
    李四     82.0 72.0 72.0
    张三     81.0 71.0 71.0
    -- Sql 2005 下 PIVOT
    SELECT StuName,[语文] AS '语文',
    [数学] AS '数学',[历史] AS '历史'
    FROM StuSources s
    PIVOT (SUM (ChengJi) FOR KeCheng IN ([语文],[数学],[历史]) )AS pvt
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2023-10-17 21:26
  • 签到天数: 718 天

    [LV.9]以坛为家II

    发表于 2009-2-10 08:12:16 | 显示全部楼层
    谢谢,学习了,行列转换很多时候会用到.
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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