zoukankan      html  css  js  c++  java
  • SQL行转列

    一张表

    查询结果为
    --行转列
    select  years,(select amount from Tb_Amount as A where month=1 and A.years=Tb_Amount.years)as m1,
    (select amount from Tb_Amount as A where month=2 and A.years=Tb_Amount.years)as m2,
    (select amount from Tb_Amount as A where month=3 and A.years=Tb_Amount.years)as m3
    from  Tb_Amount group by  years
    或者为
    select years as 年份,
    sum(case when month='1' then amount end) as 一月,
     sum(case when month='2' then amount end) as 二月,
    sum(case when month='3' then amount end) as 三月
    from dbo.Tb_Amount group by years  order by  years desc

    2.人员信息表包括姓名 时代  金额

    显示行转列
    姓名     时代       金额

    姓名  年轻         中年       老年

    张丽 1000000.00 4000000.00    500000000.00

    孙子 2000000.00   12233335.00  4552220010.00

    select uname as 姓名,
    SUM(case when era='年轻' then amount end) as 年轻,
     SUM(case when era='中年' then amount end) as 中年,
    SUM(case when era='老年' then amount end) as 老年
    from Tb_People group by uname  order by  uname desc
    

     3.学生表 [Tb_Student]

     

    显示效果

    静态SQL,指subject只有语文、数学、英语这三门课程。
    
    select sname as 姓名,
    max(case Subject when '语文' then grade else 0 end) as 语文,
    max(case Subject when '数学' then grade else 0 end) as 数学,
    max(case Subject when '英语' then grade else 0 end) as 英语
    from dbo.Tb_Student  group by  sname  order by sname desc
    
    --动态SQL,指subject不止语文、数学、英语这三门课程。
    
    declare @sql varchar(8000)
    set @sql = 'select sname as ' + '姓名'
    select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then grade else 0 end) [' + Subject + ']'
    from (select distinct Subject from Tb_Student) as a
    set @sql = @sql + ' from Tb_Student group by sname order by sname desc'
    exec(@sql)

    oracle中Decode()函数使用 然后将这些累计求和(sum部分)
    select t.sname AS 姓名,
    sum(decode(t.subject,'语文',grade,null))语文 ,
    sum(decode(t.subject,'数学',grade,null)) 数学,
    sum(decode(t.subject,'英语',grade,null)) 英语 
    from Tb_Student t group by sname order by sname desc
    
     
  • 相关阅读:
    Mysql Got a packet bigger than 'max_allowed_packet' bytes
    Git之IDEA集成Git更新项目Update Type选项解释
    IDEA获取GIT仓库时更新类型update type的选择
    git merge和git rebase的区别
    git merge和git merge --no-ff的区别
    Git中fetch和pull命令的区别
    git官网下载太慢解决方法
    IDEA执行Thread.activeCount() = 2的问题
    k8s 常见错误汇总
    Axure9破解
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/3618701.html
Copyright © 2011-2022 走看看