源表:
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
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
解决方案 »
- 关于WebBrowser1自动保存下载链接地址的文件的问题
- delphi捕捉不到stack overflow
- 求delphi函数格式及作用的中文说明(参与有分,不够再加)
- SOS!!!求助!!Delphi中用Excel作报表时,如何改变显示数据类型
- 明天回家了,散分!
- 请问在delphi下用那种控件做报表比较方便?第三方的控件也可?
- 包含抽象函数的类怎么使用? 比如TStrings
- 如何对数据进行异或操作获得一个值,内有祥细说明
- 怎样在dll文件中调用屏保?(在线等候ing...)
- (伴水)请帮我看看这个问题好吗?谢了http://www.csdn.net/Expert/topic/447/447139.shtm
- DELPHI画板怎么写?
- 一个批量修改数据,怎么写成存储过程?
/*
表结构:
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
*/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
drop table t;
create table t
( id number,
cz1 varchar(20),
cz2 varchar(20),
dd varchar(20));
insert into t
select 1,'张三','张三','1号' from dual
union all
select 2,'张三','李四','1号' from dual
union all
select 3,'李四','王五','2号' from dual
union all
select 4,'张三','王五','1号' from dual
union all
select 5,'王五','李四','2号' from dual
union all
select 6,'李四','张三','1号' from dual;select name,
sum(decode(dd,'1号操作1数量',1,0)) as "1号操作1数量",
sum(decode(dd,'1号操作2数量',1,0)) as "1号操作2数量",
sum(decode(dd,'2号操作1数量',1,0)) as "2号操作1数量",
sum(decode(dd,'2号操作2数量',1,0)) as "2号操作2数量"
from
(
select cz1 as name,dd||'操作1数量' as dd
from t
union all
select cz2 as name,dd||'操作2数量' as dd
from t
)
group by name;NAME 1号操作1数量 1号操作2数量 2号操作1数量 2号操作2数量
-------------------- ------------ ------------ ------------ ------------
李四 1 1 1 1
王五 0 1 1 1
张三 3 2 0 0
insert into t
select 1,'张三','张三','1号' from dual
union all
select 2,'张三','李四','1号' from dual
union all
select 3,'李四','王五','2号' from dual
union all
select 4,'张三','王五','1号' from dual
union all
select 5,'王五','李四','2号' from dual
union all
select 6,'李四','张三','1号' from dual;下 要是已经存在
源表:
ID 操作一 操作二 地点
1 张三 张三 1号地点
2 张三 李四 1号地点
3 李四 王五 2号地点
4 张三 王五 1号地点
5 王五 李四 2号地点
6 李四 张三 1号地点
则用
select name,
sum(decode(dd,'1号操作1数量',1,0)) as "1号操作1数量",
sum(decode(dd,'1号操作2数量',1,0)) as "1号操作2数量",
sum(decode(dd,'2号操作1数量',1,0)) as "2号操作1数量",
sum(decode(dd,'2号操作2数量',1,0)) as "2号操作2数量"
from
(
select cz1 as name,dd||'操作1数量' as dd
from t
union all
select cz2 as name,dd||'操作2数量' as dd
from t
)
group by name;出来是空的
插入提供的数据就可以得到:
需要得出下表:
姓名 1号地点操作一数量 ¦1号地点操作二数量 ¦2号地点操作一数量 ¦2号地点操作二数量
张三 3 2 0 0
李四 1 1 1 1
王五 0 1 1 1