• 经常用到的交叉表问题,一般用动态SQL能生成动态列


    原始表如下格式:
    Class     CallDate    CallCount
    1     2005-8-8    40
    1     2005-8-7    6
    2     2005-8-8    77
    3     2005-8-9    33
    3     2005-8-8    9
    3     2005-8-7    21

    根据Class的值,按日期分别统计出CallCount1,CallCount2,CallCount3。

    当该日期无记录时值为0 要求合并成如下格式:
    CallDate  CallCount1  CallCount2  CallCount3
    2005-8-9  0       0       33
    2005-8-8  40      77      9
    2005-8-7  6       0       21

    --创建测试环境
    Create table  T  (Class varchar(2),CallDate datetime, CallCount int)
    insert into T select '1','2005-8-8',40
    union all select '1','2005-8-7',6
    union all select '2','2005-8-8',77
    union all select '3','2005-8-9',33
    union all select '3','2005-8-8',9
    union all select '3','2005-8-7',21
    --动态SQL
    declare @s varchar(8000)
    set @s='select CallDate '
    select @s=@s+',[CallCount'+Class+']=sum(case when Class='''+Class+''' then CallCount else 0 end)'
    from T 
    group by Class
    set @s=@s+' from T group by CallDate order by CallDate desc '
    exec(@s)
    
    --结果
    
    CallDate                                               CallCount1  CallCount2  CallCount3  
    ------------------------------------------------------ ----------- ----------- ----------- 
    2005-08-09 00:00:00.000                                0           0           33
    2005-08-08 00:00:00.000                                40          77          9
    2005-08-07 00:00:00.000                                6           0           21
    
    --删除测试环境
    
    drop table T
    

  • 相关阅读:
    【GitHub】在Mac上配置/使用Github
    【IOS开发】《多线程编程指南》笔记
    【设计模式】二、观察者模式
    php 接受json数据时有转义字符处理办法
    highcharts 常用配置
    apache虚拟主机配置
    php,phpexcel插件导出excel使用
    json_decode转换json数据为数组出现的问题!
    redis 主从服务器
    linux 下安装redis
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234400.html
Copyright © 2020-2023  润新知