简单的行列转换

按年统计大于1的数据,按12个月列数据统计、合计。
id(int)       itemA(int 0 || 1)         itemB(int  0 || 1)     Date(datetime) 
1                  0                                     1                          2018-08-01
2                  1                                     0                          2018-07-01
3                  1                                     0                          2018-07-01
4                  1                                     0                          2018-07-01
5                  0                                     1                          2018-07-01
.
.
查询显示
类型      1月  2月   3月   4月  5月 6月  7月 8月 ..... 合计
itemA     0     0     0       0       0    0     3     0         3
itemB     0     0     0       0       0    0     1     1         2
合计        0     0     0       0       0    0     4     1         5         

-----------------------------------------------------------------------------------------------------------------------

 

-- 例子
create table t ( id int,itemA int, itemB int,Date datetime)
go 
insert t
select 1                  ,0                                     ,1                          ,'2018-08-01'
union select 2                  ,1                                     ,0                          ,'2018-07-01'
union select 3                  ,1                                    , 0                          ,'2018-07-01'
union select 4                  ,1                                    , 0                          ,'2018-07-01'
union select 5                  ,0                                     ,1                          ,'2018-07-01'

---
select  col  ,
 sum([1]) [1],sum([2]) [2],sum([3]) [3],sum([4]) [4],sum([5])  [5],sum([6])   [6],
 sum([7]) [7],sum([8]) [8],sum([9]) [9],sum([10])[10],sum([11])[11],sum([12]) [12]
from (    select col,MONTH([DATE]) m , sum(case when col ='itemA' then itemA else itemB end) val 
        from t cross apply (select 'itemA' col union select 'itemB') b 
        group by col,MONTH([DATE])
      ) t 
pivot (sum(val) for m in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) a
group by rollup (col)

--
drop table t

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值