源表: 
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 

解决方案 »

  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
    */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
      

  2.   


    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
      

  3.   

    1楼 朋友的SQL是我想要的 不过在PLSQL下没执行通过,2楼朋友的 语句 前提是在
    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;出来是空的 
      

  4.   

    注:一楼的op1,op2,addr分别对应字段 操作一   操作二   地点。
    插入提供的数据就可以得到:
    需要得出下表:   
    姓名   1号地点操作一数量   ¦1号地点操作二数量   ¦2号地点操作一数量   ¦2号地点操作二数量   
    张三         3                                     2                               0                                     0   
    李四         1                                     1                               1                                     1   
    王五         0                                     1                               1                                     1   
      

  5.   

    注: 数据库是 ORACLE 
      

  6.   

    呵,太遗憾了,我是在MS SQL Server 2000里做的,你因该把这题贴到ORACLE区去啊