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了,理解了。但我对于‘养起’还是不理解,算了,理解不了。

  • 相关阅读:
    序列化 Serialization
    http soap关系
    sql 查询
    返回最后插入到标识列的值(scope_identity.ident_current.@@identity)
    匿名方法
    九、volatile与Java内存模型
    八、Java内存模型JMM
    十、CAS
    CUSTOM ROUTE CONSTRAINTS
    获取本地数据库
  • 原文地址:https://www.cnblogs.com/mangonic/p/2506980.html
Copyright © 2011-2022 走看看