我有一个A表,是工号(userid),姓名(name);
还有一个B表,是工号(userid),剩余天数(countday),类型代码(typecode),类型名称(typename)B的值现在有,A0001,12,Z01,西瓜
             A0002,10,Z02,桔子
             A0002,5,Z03,香蕉
             
现在我想查询出来的是:工号,姓名,西瓜个数,桔子个数,香蕉个数
A0001,A01,12       ,0      ,0
A0002,A02,0        ,10     ,5请问这样的查询语句,应该怎么写?在线等,谢谢。

解决方案 »

  1.   


    WITH taba AS(
    SELECT 'A0001' userid,'A01' NAME FROM dual UNION ALL 
    SELECT 'A0002','A02' FROM dual
    ),
    tabb AS(
    SELECT 'A0001' userid,12 countday,'Z01' typecode,'西瓜'typename FROM dual UNION ALL
    SELECT 'A0002',10,'Z02','桔子' FROM dual UNION ALL 
    SELECT 'A0002',5,'Z03','香蕉' FROM dual
    )
    --以上是测试数据,下面是SQL查询语句,表换成你的实际表就可以了
    --此只是固定行列转换的,也就是说你 typename如果是不定的,那么要用动态行列转换
    --动态行列转换具体参看:http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?96900
    SELECT a.userid,NAME,
    Sum(Decode(b.typename,'西瓜',countday,0)) 西瓜个数,
    Sum(Decode(b.typename,'桔子',countday,0)) 桔子个数,
    Sum(Decode(b.typename,'香蕉',countday,0)) 香蕉个数
    FROM taba a ,tabb b
    WHERE a.userid=b.userid
    GROUP BY a.userid,a.NAME 
    --结果: 
    USERID  NAME   西瓜个数  桔子个数  香蕉个数
    A0001   A01    12        0          0
    A0002   A02    0         10         5
      

  2.   

    狂浪的帖子写的不错,直接用上就行了。
    http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?18003
      

  3.   

    select a.userid,sum(decode(b.typecode,'z01',b.countday,0)) 西瓜个数,
    sum(decode(b.typecode,'z02',b.countday,0)) 桔子个数,
    sum(decode(b.typecode,'z03',b.countday,0)) 香蕉个数
    from a,b
    where a.userid=b.userid
    group by a.userid
      

  4.   

    其实我A表还是有很多信息的,包括工号,姓名,部门,职位等,
    我要的结果是这些基本信息再加个数。就是工号,姓名,部门,职位。西瓜个数,桔子个数,香蕉个数
    这样的情况下,不能group by 所有字段吧?这样的情况应该怎么办?
      

  5.   

    SELECT A.工号,A.姓名,A.部门,A.职位...,B.西瓜个数,B.桔子个数,B.香蕉个数FROM
    (select b.userid ID,sum(decode(b.typecode,'z01',b.countday,0)) 西瓜个数,
    sum(decode(b.typecode,'z02',b.countday,0)) 桔子个数,
    sum(decode(b.typecode,'z03',b.countday,0)) 香蕉个数
    from b
    group by b.userid) ZB,A
    WHERE A.userid=ZB.ID
      

  6.   

    select a.*,西瓜个数,桔子个数,香蕉个数
    from a,
    (select b.userid,sum(decode(b.typecode,'z01',b.countday,0)) 西瓜个数,
    sum(decode(b.typecode,'z02',b.countday,0)) 桔子个数,
    sum(decode(b.typecode,'z03',b.countday,0)) 香蕉个数
    from b
    group by b.userid) b
    where a.userid=b.userid