zoukankan      html  css  js  c++  java
  • sql 2005 行转列 另一种方法

    CREATE TABLE [dbo].[RowToColumn](
    [姓名] [varchar](10) NULL,
    [课程] [varchar](10) NULL,
    [分数] [int] NULL
    ) ON [PRIMARY]
    
    insert into RowToColumn values 
     ('王五','语文','66')
    ,('王五','数学','67')
    ,('王五','物理','68')
    --...
    
    --法一.
    select 姓名,
    MAX(case 课程 when '语文' then 分数 else null end) as 语文,
    MAX(case 课程 when '数学' then 分数 else null end) as 数学,
    MAX(case 课程 when '物理' then 分数 else null end) as 物理
    from RowToColumn 
    group by 姓名
    GO
    --法二.
    select [姓名],[语文],[数学],[物理]
    from(
    select 姓名,课程, 分数 from rowtocolumn
    ) p
    PIVOT
    (
     avg( [分数]) For 课程 in (语文,数学,物理 )
    ) as t_unpvt
    GO
    
    
    

    使用 PIVOT 和 UNPIVOT

    PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)。

    以下是带批注的 PIVOT 语法。

    SELECT <非透视的列>,

    [第一个透视的列] AS <列名称>,

    [第二个透视的列] AS <列名称>,

    ...

    [最后一个透视的列] AS <列名称>,

    FROM

    (<生成数据的 SELECT 查询>)

    AS <源查询的别名>

    PIVOT

    (

    <聚合函数>(<要聚合的列>)

    FOR

    [<包含要成为列标题的值的列>]

    IN ( [第一个透视的列], [第二个透视的列],

    ... [最后一个透视的列])

    ) AS <透视表的别名>

    <可选的 ORDER BY 子句>;


    可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。

     pivot的用法:

     http://technet.microsoft.com/zh-cn/library/ms177410.aspx

  • 相关阅读:
    android闹钟
    Android API : SMS短信服务处理
    Windows Mobile Web方式下载文件
    摘录的一点东西,很有感触
    Net Compact Framework 基础篇(6) Socket通信 【转】
    实例讲解.NET中资源文件的创建与使用
    如何安装Apk文件到Android模拟器
    __forceinline 关键字
    Allocate aligned memory
    linux svn安装和配置,不结合apache
  • 原文地址:https://www.cnblogs.com/wucg/p/1908248.html
Copyright © 2011-2022 走看看