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

  • 相关阅读:
    【剑指offer】3-数组中重复的数字
    自定义管道遇到问题解决方案
    vue的双向绑定示例
    子组件传递给父组件数据
    vue里的共享对象示例
    mysql里的explain介绍
    mysql索引
    修改MySQL字符集
    v-model修饰符示例
    vue下拉列表示例
  • 原文地址:https://www.cnblogs.com/mangonic/p/2506980.html
Copyright © 2011-2022 走看看