• 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
  • 相关阅读:
    sun.misc.Unsafe
    一个普通Java程序包含哪些线程??
    类加载-类加载器
    类加载-类的生命周期
    类加载-初始化的触发
    Java语法糖
    Java线程池
    Java线程池之ThreadPoolExecutor
    【结构型】- 适配器模式
    数据结构与算法之排序(3)插入排序 ——in dart
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/15324099.html
Copyright © 2020-2023  润新知