• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

问个关于查询问题

iamme81 2008-04-03 04:16:32
现有表asd
表中结构如下

create table asd
(aa int,bb int)

insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

现在要显示aa共有行数为一个指定数字的aa列,bb列和总和数
如:要显示aa共有3行则显示
a b 共有
1 1 3
1 2 3
1 3 3
3 1 3
3 2 3
3 3 3
如:要显示aa共有2行则显示
a b 共有
4 1 2
4 2 2

查询语句该如何写

在sybase中写成如下语句有正确结果,但是在SQL Servr中会要你bb必须包含在group中,但将bb写入group中后查询结果则完全不正确,去掉bb列可以获得正确的执行结果但不符合需求
select aa,bb,count(aa) from asd
group by aa having count(aa)=3

...全文
55 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iamme81 2008-04-04
[Quote=引用 7 楼 iamme81 的回复:]
引用 3 楼 dawugui 的回复:
--上面少了个共有
--使用变量完成

SQL codecreate table asd (aa int,bb int)
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

declare @aa as int

se…
[/Quote]
我的意思是大于两条的

比如count(aa)>2且也要共有几条记录,你的方法就取不出这个结果了
回复
iamme81 2008-04-04
[Quote=引用 6 楼 happyflystone 的回复:]
SQL codecreate table asd
(aa int,bb int)

insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

go
select a.*,b.cnt
from asd a
right join (
select aa,count(aa) as cnt from asd
group by aa…
[/Quote]

完全正确,谢谢楼上了
回复
dawugui 2008-04-03
[Quote=引用 7 楼 iamme81 的回复:]
引用 3 楼 dawugui 的回复:
--上面少了个共有
--使用变量完成

SQL codecreate table asd (aa int,bb int)
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

declare @aa as int

se…
[/Quote]
你要去重复的话,加个distinct.
回复
iamme81 2008-04-03
[Quote=引用 3 楼 dawugui 的回复:]
--上面少了个共有
--使用变量完成

SQL codecreate table asd (aa int,bb int)
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

declare @aa as int

set @aa = 3
select * , 共有 = @aa from asd…
[/Quote]

这个方法过于取巧了,不能算正确,若要求取出大于重复两条的记录结果就不正确了
回复
-狙击手- 2008-04-03
create table asd 
(aa int,bb int)

insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

go
select a.*,b.cnt
from asd a
right join (
select aa,count(aa) as cnt from asd
group by aa
having count(aa)=2 ) b
on a.aa = b.aa

drop table asd

/*

aa bb cnt
----------- ----------- -----------
4 1 2
4 2 2

(所影响的行数为 2 行)

*/
回复
-狙击手- 2008-04-03
create table asd
(aa int,bb int)

insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

go
select a.*,b.cnt
from asd a
right join (
select aa,count(aa) as cnt from asd
group by aa
having count(aa)=3 ) b
on a.aa = b.aa

drop table asd

/8

aa bb cnt
----------- ----------- -----------
1 1 3
1 2 3
1 3 3
3 1 3
3 2 3
3 3 3

(所影响的行数为 6 行)
*/
回复
dawugui 2008-04-03
--这是不用变量的,具体需要哪个,你自己选择.
create table asd (aa int,bb int) 
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

select * , 共有 = 3 from asd where aa in (select aa from asd group by aa having count(*) = 3)
/*
aa bb 共有
----------- ----------- -----------
1 1 3
1 2 3
1 3 3
3 1 3
3 2 3
3 3 3

(所影响的行数为 6 行)
*/

select * , 共有 = 2 from asd where aa in (select aa from asd group by aa having count(*) = 2)
/*
aa bb 共有
----------- ----------- -----------
4 1 2
4 2 2

(所影响的行数为 2 行)
*/

drop table asd
回复
dawugui 2008-04-03
--上面少了个共有
--使用变量完成
create table asd (aa int,bb int) 
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

declare @aa as int

set @aa = 3
select * , 共有 = @aa from asd where aa in (select aa from asd group by aa having count(*) = @aa)
/*
aa bb 共有
----------- ----------- -----------
1 1 3
1 2 3
1 3 3
3 1 3
3 2 3
3 3 3

(所影响的行数为 6 行)
*/

set @aa = 2
select * , 共有 = @aa from asd where aa in (select aa from asd group by aa having count(*) = @aa)
/*
aa bb 共有
----------- ----------- -----------
4 1 2
4 2 2

(所影响的行数为 2 行)
*/

drop table asd
回复
dawugui 2008-04-03
--使用变量完成

create table asd (aa int,bb int) 
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

declare @aa as int

set @aa = 3
select * from asd where aa in (select aa from asd group by aa having count(*) = @aa)
/*
aa bb
----------- -----------
1 1
1 2
1 3
3 1
3 2
3 3

(所影响的行数为 6 行)
*/

set @aa = 2
select * from asd where aa in (select aa from asd group by aa having count(*) = @aa)
/*
aa bb
----------- -----------
4 1
4 2

(所影响的行数为 2 行)
*/

drop table asd
回复
dawugui 2008-04-03
create table asd (aa int,bb int) 
insert asd values(1,1)
insert asd values(1,2)
insert asd values(1,3)
insert asd values(2,1)
insert asd values(3,1)
insert asd values(3,2)
insert asd values(3,3)
insert asd values(4,1)
insert asd values(4,2)
insert asd values(5,1)

select * from asd where aa in (select aa from asd group by aa having count(*) = 3)
/*
aa bb
----------- -----------
1 1
1 2
1 3
3 1
3 2
3 3

(所影响的行数为 6 行)
*/

select * from asd where aa in (select aa from asd group by aa having count(*) = 2)
/*
aa bb
----------- -----------
4 1
4 2

(所影响的行数为 2 行)
*/

drop table asd
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-03 04:16
社区公告
暂无公告