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
  • 相关阅读:
    vue开发(一)安装
    Ubuntu18.04安装mysql
    使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转
    Mysql 清空数据后,释放硬盘文件
    依赖注入
    ubuntu 上开发.netcore
    使用python获取微医数据
    Mysql查询某字段重复值并删除重复值
    使用pyinstaller 打包python程序
    堆(heap)和栈(stack)、内存泄漏(memory leak)和内存溢出
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/15324099.html
Copyright © 2011-2022 走看看