/*
问题:
源表:
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
问题:
源表:
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