现在要统计某两个地方发生各类犯罪案件的总数,有两个条件比如 第一个条件是地名,获取两个值:A、B,第二个条件是案件类型,取两个类型:抢劫、盗窃。现在要求分别查询统计A地、B地发生抢劫和盗窃案件的数量分别是多少。要求的结果应该是如下格式:   盗窃  抢劫  
A   20    17
B   28    18就是说分别将两个地方对对应的案件类型进行查询统计,得到这样的一个二维统计结果我这么处理:select t.address,t.type,count(*) from test t where t.address in ('"+addrss+"') and t.type in ('"+type+"') order by t.address,t.type;
统计就是将这个一次统计出来了,偏差很远。不知道该怎么完成这样的SQL语句,希望有高手能指点下,或者在java程序里面处理传值的方式,谢谢!!

解决方案 »

  1.   


    select t.address,
    sum(decode(t.type,'盗窃',1,0) "盗窃",
    sum(decode(t.type,'抢劫',1,0) "抢劫",
    from test t 
    where t.address in ('a','b')
    group by t.address;
      

  2.   

    --不好意思上面的少了个括号
    select t.address,
    sum(decode(t.type,'盗窃',1,0)) "盗窃",
    sum(decode(t.type,'抢劫',1,0)) "抢劫",
    from test t 
    where t.address in ('a','b')
    group by t.address;
      

  3.   


    String sqlstr="select t.address,
                   sum(decode(t.type,'盗窃',1,0) 盗窃,
                   sum(decode(t.type,'抢劫',1,0) 抢劫,
                   from test t 
                   where t.address ='"+addrss+"' group by t.address";
      

  4.   

    --莫非是警察你?
    select t.address,
    count(decode(t.type,'盗窃',1)) 盗窃,count(decode(t.type,'抢劫',1)) 抢劫
    from test t where t.address in ('"+addrss+"') 
    order by t.address
      

  5.   


    select t.address,
    count(decode(t.type,'盗窃',1)) 盗窃,count(decode(t.type,'抢劫',1)) 抢劫
    from test t where t.address in ('"+addrss+"') 
    group  by t.address