表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满足,但我不知道存储怎么去写!求高人解决!
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满足,但我不知道存储怎么去写!求高人解决!
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
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
where count(a.vlue1)>2 and count(b.value2) > 2
group by a.id
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
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*/
(
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
inner join有问题,如果其中一个表不存在,那么就不能表示出来了.
--------------
你沒看清楚要求,“其中一个表不存在,那么就不能表示出来了”,需求本來就是這樣的。
我是想再多问一下,如果不存在,能否将不存在的那张表也打印为"0"件出来呢?
------------
"不存在的那张表"?!還是表中不存在紀錄?如果不存在那張表,就不是這種寫法。如果是不存在數據,改用LEFT JOIN。
LEFT JOIN也不全对呀,因为你也不知道是哪张表不存在记录.
paoluo(一天到晚游泳的鱼)大大都把语句写出来了
这样很多东西自己改改就可以了...很多时候别人提点一下 自己弄 比较好些
-----------
你这算什么啊....钻NIU JIAO JIAN 啊
LEFT JOIN 可以用ISNULL()去作判断......
呵呵是表中不存在紀錄.
LEFT JOIN也不全对呀,因为你也不知道是哪张表不存在记录.
------------
倒,還有這個。我以為你說後面的表不存在紀錄。改用FULL JOIN。