如下是性别表 id  value
  1    男
  2    女
  3    春哥如下是数据表name  sex
小明  男
小丽  女
小春  春哥
小王  男
小红  女根据以上表,我要以下结果 男  女  春哥
  2   2   1注意:没有的显示为0,而不是不显示
关键在于通用性,因为以后可能还要拓展,我的意思是 性别表可能还要加性别,那时候你的sql语句不改还能正确 。求解~!

解决方案 »

  1.   

    http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html
    版主的帖子
      

  2.   

    WITH 性别表 AS(
    SELECT 1 id, '男' value FROM dual UNION ALL 
    SELECT 2,'女' FROM dual UNION ALL 
    SELECT 3,'春哥' FROM dual
    ),
    数据表 AS( 
    SELECT '小明' name,'男' sex FROM dual UNION ALL 
    SELECT '小丽',  '女' FROM dual UNION ALL  
    SELECT '小春',  '春哥' FROM dual UNION ALL 
    SELECT '小王',  '男' FROM dual UNION ALL 
    SELECT '小红',  '女' FROM dual
    )
    SELECT 
       Sum(Decode(Nvl(b.sex,0),'男',1,0)) 男,
       Sum(Decode(Nvl(b.sex,0),'女',1,0)) 女,
       Sum(Decode(Nvl(b.sex,0),'春哥',1,0)) 春哥
    FROM 性别表 a left join 数据表 b
    ON a.Value=b.sex--
     男  女  春哥
    -----------------
      2   2   1
      

  3.   

    http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html
    力挺狂浪
      

  4.   

    SQL> with xb as(
      2  select  1 id, '男' value from dual union all
      3  select  2,'女' from dual union all
      4  select  3,'春哥' from dual
      5  ),
      6  dt as(
      7  select  '小明' name,'男' sex from dual union all
      8  select  '小丽',  '女' from dual union all
      9  select  '小春',  '春哥' from dual union all
     10  select  '小王',  '男' from dual union all
     11  select  '小红',  '女' from dual
     12  )
     13  select sum(decode(b.sex,'男',1,0)) "男",
     14  sum(decode(b.sex,'女',1,0)) "女",
     15  sum(decode(b.sex,'春哥',1,0)) "春哥"
     16  from xb a,dt b
     17  where a.value=b.sex
     18  /
     
             男          女         春哥
    ---------- ---------- ----------
             2          2          1