带统计的表的行列转换问题

/*
问题:
源表:   
ID   操作一   操作二   地点   
1     张三       张三       1号地点   
2     张三       李四       1号地点   
3     李四       王五       2号地点   
4     张三       王五       1号地点   
5     王五       李四       2号地点   
6     李四       张三       1号地点   


需要得出下表:   
姓名   1号地点操作一数量   |1号地点操作二数量   |2号地点操作一数量   |2号地点操作二数量   
张三         3             2                   0                  0   
李四         1             1                   1                  1   
王五         0             1                   1                  1  
*/



/*
表结构:
CREATE TABLE [op] (
    [id] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [op1] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [op2] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [addr] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO

插入数据:
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('1 ','张三      ','张三      ','1号地点   ')
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('2 ','张三      ','李四      ','1号地点   ')
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('3 ','李四      ','王五      ','2号地点   ')
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('4 ','张三      ','王五      ','1号地点   ')
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('5 ','王五      ','李四      ','2号地点   ')
INSERT INTO [op] ([id],[op1],[op2],[addr]) values ('6 ','李四      ','张三      ','1号地点   ')

*/


select      o.names  as  姓名,
    
count ( case   when  op1 = o.names  and  addr = ' 1号地点 '   then  op.op1  end as   ' 1号地点操作一数量 ' ,
    
count ( case   when  op2 = o.names  and  addr = ' 1号地点 '   then  op.op2  end as   ' 1号地点操作二数量 ' ,
    
count ( case   when  op1 = o.names  and  addr = ' 2号地点 '   then  op.op1  end as   ' 2号地点操作一数量 ' ,
    
count ( case   when  op2 = o.names  and  addr = ' 2号地点 '   then  op.op2  end as   ' 2号地点操作二数量 '
from
    (
select   distinct  op1  as  names  from      -- 这个语句是提取操作一与操作二里出现的全部人员并且没有重复
    ( select   distinct  op1  from  op  where  op1 != ''
    
union   all
    
select   distinct  op2   from  op  where  op2 != '' as  w)  as  o,op
group   by  o.names


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值