表abc1 字段 id   vlue1  表 abc2  字段 id     value2
            aaa   3                   aaa      7
            aaa   4                   aaa      8
            aaa   5                   aaa      5
            bbb   2                   bbb      1
            ccc   1                   bbb      4
            ccc   2                   ccc      5现在我需要查询结果 这样的   id     count(abc1)      count(abc2)
                            aaa         3                3
目的是:返回id在abc1和abc2中都有2条以上数据的项,并且把数据项多少统计出来。看结果只有 aaa满足,但我不知道存储怎么去写!求高人解决!

解决方案 »

  1.   

    select x.id,x.count1,y.count2
    from (
    select id,count(*) as count1 from a group by id having count*)>2
    ) as x,(
    select id,count(*) as count1 from b group by id having count*)>2
    ) as y
    where x.id=y.id
      

  2.   


    Select
    A.id,
    A.abc1count,
    B.abc2count
    From
    (Select id, Count(id) As abc1count From abc1 Group By id Having Count(id) > 2) A
    Inner Join
    (Select id, Count(id) As abc2count From abc2 Group By id Having Count(id) > 2) B
    On A.id = B.id
      

  3.   

    select a.id,count(a.vlue1),count(b.value2) from abc1 a inner join abc2 on a.id = b.id 
    where count(a.vlue1)>2 and count(b.value2) > 2
    group by a.id
      

  4.   

    or:select x.id,x.count1,y.count2
    from (
    select id,count(*) as count1 from a group by id
    ) as x,(
    select id,count(*) as count1 from b group by id
    ) as y
    where x.id=y.id
    and x.count1>2
    and y.count2>2
      

  5.   

    是>2还是>=2搂主自己判断
      

  6.   

    --創建測試環境
    Create Table abc1
    (id Varchar(10),
     value1 Int)
    Create Table abc2
    (id Varchar(10),
     value2 Int)
    --插入數據
    Insert abc1 Select 'aaa',   3
    Union All Select 'aaa',   4                   
    Union All Select 'aaa',   5                   
    Union All Select 'bbb',   2                   
    Union All Select 'ccc',   1                   
    Union All Select 'ccc',   2                   Insert abc2 Select 'aaa',      7
    Union All Select 'aaa',      8
    Union All Select 'aaa',      5
    Union All Select 'bbb',      1
    Union All Select 'bbb',      4
    Union All Select 'ccc',      5
    GO
    --測試
    Select
    A.id,
    A.abc1count,
    B.abc2count
    From
    (Select id, Count(id) As abc1count From abc1 Group By id Having Count(id) > 2) A
    Inner Join
    (Select id, Count(id) As abc2count From abc2 Group By id Having Count(id) > 2) B
    On A.id = B.id
    GO
    --刪除測試環境
    Drop Table abc1, abc2
    --結果
    /*
    id abc1count abc2count
    aaa 3 3*/
      

  7.   

    create table abc1 
    (
    id varchar(10),
    vlue1  int
    )create table abc2
    (
    id varchar(10),
    vlue2  int
    )
    delete abc1
    insert  into abc1
    select 
    'aaa' , 3                   union all select 
                'aaa'  , 4                union all select     
                'aaa' ,  5         union all select          
                'bbb' ,  2       union all select           
     'bbb' ,  2       union all select           
     'bbb' ,  2       union all select           
                'ccc'  ,1          union all select          
                'ccc' ,2                  insert into abc2
    select 
                      'aaa'  ,   7 union all select 
                    'aaa'   ,   8 union all select 
                    'aaa'  ,   5 union all select 
                   'bbb'  ,    1 union all select 
                   'bbb' ,    4 union all select 
                   'ccc'  ,    5select A.id ,A.cnt1,B.cnt2 from 
    (select id ,count(1) as cnt1 from abc1  group by id) A
    inner join 
    (select id ,count(1) as cnt2 from abc2  group by id) B
    on A.id = B.id and A.cnt1>=2 and B.cnt2>=2id      cnt1     cnt2
    aaa 3 3
    bbb 3 2
      

  8.   

    inner join有问题,如果其中一个表不存在,那么就不能表示出来了.
      

  9.   

    aqbeyond(海阔天空) ( ) 信誉:100  2007-08-03 10:27:04  得分: 0  
     
     
       inner join有问题,如果其中一个表不存在,那么就不能表示出来了.
      
     
    --------------
    你沒看清楚要求,“其中一个表不存在,那么就不能表示出来了”,需求本來就是這樣的。
      

  10.   

    aqbeyond(海阔天空) ( ) 信誉:100  2007-08-03 10:44:22  得分: 0  
     
     
       我是想再多问一下,如果不存在,能否将不存在的那张表也打印为"0"件出来呢?
      
     
    ------------
    "不存在的那张表"?!還是表中不存在紀錄?如果不存在那張表,就不是這種寫法。如果是不存在數據,改用LEFT JOIN。
      

  11.   

    呵呵是表中不存在紀錄.
    LEFT JOIN也不全对呀,因为你也不知道是哪张表不存在记录.
      

  12.   

    full join 再用 isnull
    paoluo(一天到晚游泳的鱼)大大都把语句写出来了
    这样很多东西自己改改就可以了...很多时候别人提点一下 自己弄 比较好些
      

  13.   

    aqbeyond(海阔天空) ( ) 信誉:100 
    -----------
    你这算什么啊....钻NIU JIAO JIAN 啊
    LEFT JOIN 可以用ISNULL()去作判断......
      

  14.   

    select abc1.id,count1=((select count(a.id) from abc1 as a where a.id = abc1.id)),count2=(select count(b.id) from abc1 as b where b.id = abc1.id) from abc1 inner join abc2 on abc1.id = abc2.id where (select count(a.id) from abc1 as a where a.id = abc1.id) >= 2 and (select count(b.id) from abc2 as b where b.id = abc1.id) >= 2 group by abc1.id
      

  15.   

    aqbeyond(海阔天空) ( ) 信誉:100  2007-08-03 10:54:00  得分: 0  
     
     
       呵呵是表中不存在紀錄.
    LEFT JOIN也不全对呀,因为你也不知道是哪张表不存在记录.
      
     
    ------------
    倒,還有這個。我以為你說後面的表不存在紀錄。改用FULL JOIN。
      

  16.   

    呵呵,谢谢楼上等的兄弟,我试了下 paoluo(一天到晚游泳的鱼 ,完全符合要求。