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

  • 相关阅读:
    latex如何输入正确的 双引号
    【leetcode】Linked List Cycle
    CodeForces 441 A. Valera and Antique Items
    JS封深入了解
    ArcGIS Engine开发之旅04---ARCGIS接口详细说明
    ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
    ArcGIS Engine开发之旅02--ArcGIS Engine中的类库
    ArcGIS Engine开发之旅01---产品组成、逻辑体系结构
    ArcGIS三大文件格式解析
    1.准备工作及实例
  • 原文地址:https://www.cnblogs.com/wucg/p/1908248.html
Copyright © 2011-2022 走看看