• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一条查询语句的写法。

szc21 2007-08-03 09:00:39
表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满足,但我不知道存储怎么去写!求高人解决!
...全文
438 点赞 收藏 20
写回复
20 条回复
szc21 2007年08月03日
呵呵,谢谢楼上等的兄弟,我试了下 paoluo(一天到晚游泳的鱼 ,完全符合要求。
回复 点赞
aqbeyond 2007年08月03日
呵呵,带星的就是不一样呀.
回复 点赞
paoluo 2007年08月03日
aqbeyond(海阔天空) ( ) 信誉:100 2007-08-03 10:54:00 得分: 0


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


------------
倒,還有這個。

我以為你說後面的表不存在紀錄。

改用FULL JOIN。
回复 点赞
silvanus 2007年08月03日
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

回复 点赞
SoftwKLC 2007年08月03日
aqbeyond(海阔天空) ( ) 信誉:100
-----------
你这算什么啊....钻NIU JIAO JIAN 啊
LEFT JOIN 可以用ISNULL()去作判断......
回复 点赞
welove1983 2007年08月03日
full join 再用 isnull
paoluo(一天到晚游泳的鱼)大大都把语句写出来了
这样很多东西自己改改就可以了...

很多时候别人提点一下 自己弄 比较好些
回复 点赞
aqbeyond 2007年08月03日
呵呵是表中不存在紀錄.
LEFT JOIN也不全对呀,因为你也不知道是哪张表不存在记录.
回复 点赞
paoluo 2007年08月03日
aqbeyond(海阔天空) ( ) 信誉:100 2007-08-03 10:44:22 得分: 0


我是想再多问一下,如果不存在,能否将不存在的那张表也打印为"0"件出来呢?


------------
"不存在的那张表"?!還是表中不存在紀錄?

如果不存在那張表,就不是這種寫法。

如果是不存在數據,改用LEFT JOIN。
回复 点赞
echiynn 2007年08月03日
....

又跑來個"海闊天空"
回复 点赞
aqbeyond 2007年08月03日
我是想再多问一下,如果不存在,能否将不存在的那张表也打印为"0"件出来呢?
回复 点赞
paoluo 2007年08月03日
aqbeyond(海阔天空) ( ) 信誉:100 2007-08-03 10:27:04 得分: 0


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


--------------
你沒看清楚要求,“其中一个表不存在,那么就不能表示出来了”,需求本來就是這樣的。
回复 点赞
aqbeyond 2007年08月03日
inner join有问题,如果其中一个表不存在,那么就不能表示出来了.
回复 点赞
fwacky 2007年08月03日
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' , 5

select 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>=2

id cnt1 cnt2
aaa 3 3
bbb 3 2
回复 点赞
paoluo 2007年08月03日
--創建測試環境
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

*/
回复 点赞
szc21 2007年08月03日
谢谢各位,我看看效果
回复 点赞
昵称被占用了 2007年08月03日
是>2还是>=2搂主自己判断

回复 点赞
昵称被占用了 2007年08月03日
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

回复 点赞
xmlquit 2007年08月03日
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
回复 点赞
paoluo 2007年08月03日

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
回复 点赞
昵称被占用了 2007年08月03日
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
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告