/**//*问题:源表: 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,opgroup by o.names