zoukankan      html  css  js  c++  java
  • Sqlsever 行转列与列转行

    CREATE TABLE [dbo].[Chengji](
        [Name] nvarchar(20) NOT NULL,
        [Kemu] nvarchar(20) NOT NULL,
        [Fenhu] [int] NULL
    ) ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[Chengji] ADD  DEFAULT ((0)) FOR [Fenhu]
    GO
    
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('张三','语文',80)
    GO
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('张三','数学',60)
    GO
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('张三','英语',99)
    GO
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('李四','语文',80)
    GO
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('李四','数学',80)
    GO
    INSERT [dbo].[Chengji] ([Name], [Kemu], [Fenhu]) VALUES ('李四','英语',80)
    GO
    
    --1.行转列
    --方法一:
    select name,
    sum(case kemu when '语文' then Fenhu else 0 end) '语文',
    sum(case kemu when '数学' then Fenhu else 0 end) '数学',
    sum(case kemu when '英语' then Fenhu else 0 end) '英语'
    from 
    Chengji
    group by Name
    --方法二:
    select * from Chengji
    pivot (sum(fenhu) for kemu in ([语文],[数学],[英语])) as t
    
    --2.列转行
    --创建成绩2表
    select *  into Chengji2 from (
    select * from Chengji
    pivot (sum(fenhu) for kemu in ([语文],[数学],[英语])) as t
    ) t
    --方法一:
    select name,'语文' 科目,语文 '成绩'  from Chengji2 union all 
    select name,'数学' 科目,数学 '成绩'  from Chengji2  union all 
    select name,'英语' 科目,英语 '成绩' from Chengji2
    order by name,科目
    --方法二:
    select * from Chengji2 UNPIVOT([fenshu] for [成绩] in ([语文],[数学],[英语])) as T
  • 相关阅读:
    Oracle Index 索引监控
    Oracle Job
    Oracle 数据类型
    Greenplum 的发展历史
    Mongodb账户管理
    MongoDB 备份与恢复
    MySQL 查看用户授予的权限
    Linux 不同方法查看进程消耗CPU IO 等
    Oracle 体系结构图
    Oracle 后台进程(六)PMON进程
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/15324099.html
Copyright © 2011-2022 走看看