zoukankan      html  css  js  c++  java
  • 通过Case When语句作行列转换 echo

    在DT

    现在写出解决方案:

    问题描述:

    有一张表,数据如下:

    /*
        Date        Tag
        2010-01-01   是
        2010-01-01   是
        2010-01-01   是
        2010-01-02   否
        2010-01-02   否
    */

    要求转换结果:

    /*
    转换结果:
    
        Date        是    否
        2010-01-01    3    0
        2010-01-02    0    2
    
    */


    用Case When语句解决:

    select TheDate,SUM(case Tag when '' then 1 else 0 end) [],
                   SUM(case Tag when '' then 1 else 0 end) []
                   from #Test
                   group by TheDate

    以上SQL语句,可以通过构造变量了实现:

    create table #Test
    (
        TheDate    varchar(30),
        Tag    varchar(10)
    )
    
    go
    
    insert into #Test values ('2010-01-01','');
    insert into #Test values ('2010-01-01','');
    insert into #Test values ('2010-01-01','');
    insert into #Test values ('2010-01-02','');
    insert into #Test values ('2010-01-02','');
    
    select * from #Test;
    
    --drop table #Test;
    
    
    declare @tempSelect varchar(4000);
    set @tempSelect = 'select TheDate';
    
    select @tempSelect += ',SUM(case Tag when '''+ Tag +''' then 1 else 0 end) ['+ Tag +']'
        from (select distinct Tag from #Test) as tab;--重点在这句话select distinct Tag from #Test
        
    select @tempSelect += ' ' + 'from #Test group by TheDate;'
    
    print @tempSelect
    exec(@tempSelect)

    执行结果:

    KO了,理解了。但我对于‘养起’还是不理解,算了,理解不了。

  • 相关阅读:
    使用 media 实现响应式布局
    Django组件的中间件
    Django组件的cookie和 session,用户认证组件
    Django的文件上传和分页
    Ajax
    Django模型层的多表操作(2)
    Django模型层的多表操作(1)
    Django的查询表记录
    Django2.0版本的路由层和ORM但表操作
    Django的路由层,视图层和模版层
  • 原文地址:https://www.cnblogs.com/mangonic/p/2506980.html
Copyright © 2011-2022 走看看