SQL单表查询问题.

TossShinHwa 2009-08-10 10:56:24
有表A(aa,bb)如下:
aa bb
1 a
1 a
1 a
2 b
2 b
2 b
3 c
3 c
3 c
3 d
4 d
4 d
4 e
5 f
5 f
5 f

也就是aa,bb均不是唯一.
现需以下结果:
如果aa相同,则计算bb:当bb相同就只计算一次,bb不同就分开计算
比如:
1 a
1 a
1 a
2 b
2 b
2 b
结果应该是:
1 a
2 b


但是,当aa相同,计算bb时,bb不同,则要分开计算
比如:
3 c
3 c
3 c
3 d
结果应该是:
3 c
3 d


又当aa不同时,bb的值相互不影响
比如
3 d
4 d
结果应该是:
3 d
4 d



最终结果应该是:
1 a
2 b
3 c
3 d
4 d
4 e
5 f




可能没表述清楚...囧...
...全文
114 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2009-08-10
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null 
drop table [tb]
go
create table [tb]([aa] int,[bb] varchar(1))
insert [tb]
select 1,'a' union all
select 1,'a' union all
select 1,'a' union all
select 1,'b' union all
select 2,'b' union all
select 2,'b'
go
if object_id('table1') is not null
drop table table1
go
create table table1([aa] int)
insert table1
select 1 union all select 2 union all select 3
go
select table1.aa,k.bb
from table1 left join (select distinct * from tb) k
on table1.aa= k.aa
/*
aa bb
----------- ----
1 a
1 b
2 b
3 NULL
*/
--下面正常的链接
select table1.aa,k.bb
from table1 join (select distinct * from tb) k
on table1.aa= k.aa

/*\
aa bb
----------- ----
1 a
1 b
2 b
*/
feixianxxx 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tossshinhwa 的回复:]
我最后得到的结果aa,bb

始终没有直接查table1的aa的结果数多.

table1有160+条

联合查只有140+条
[/Quote]

select  table1.aa,k.bb 
from table1 left join (select distinct * from 表) k
on table1.aa= k.aa
SQL77 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tossshinhwa 的回复:]
我查询出来的结果aa就没有重复了...就算bb不同...也只显示一条

PS:  SQL2000
[/Quote]
FULL JOIN ???LEFT JOIN 应该可以了
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
我查询出来的结果aa就没有重复了...就算bb不同...也只显示一条

PS: SQL2000
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
我是结果偏少啊...left jion之后结果还是一样...
zhaoyh0530 2009-08-10
  • 打赏
  • 举报
回复
select distinct aa,bb 
from tb
--小F-- 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tossshinhwa 的回复:]
我最后得到的结果aa,bb

始终没有直接查table1的aa的结果数多.

table1有160+条

联合查只有140+条
[/Quote]

left join
htl258_Tony 2009-08-10
  • 打赏
  • 举报
回复
join改为left join
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
我最后得到的结果aa,bb

始终没有直接查table1的aa的结果数多.

table1有160+条

联合查只有140+条
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
还有一点.

我是根据一组aa的数组来查询的

也就是我现在有张表,只保存了aa,比如table1

我是
select distinct table1.aa,表.bb
from table1 join 表
on table1.aa= 表.aa
--小F-- 2009-08-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-08-10 11:10:05
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([aa] int,[bb] varchar(1))
insert [tb]
select 1,'a' union all
select 1,'a' union all
select 1,'a' union all
select 1,'b' union all
select 2,'b' union all
select 2,'b'
--------------开始查询--------------------------
select distinct aa,bb from [tb]
----------------结果----------------------------
/*aa bb
----------- ----
1 a
1 b
2 b

(所影响的行数为 3 行)

*/
htl258_Tony 2009-08-10
  • 打赏
  • 举报
回复
select distinct * from A

有问题吗?
SQL77 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tossshinhwa 的回复:]
重新描述一下例子
有表A(aa,bb)如下:
aa bb
1 a
1 a
1 a
1 b
2 b
2 b
结果应该是:
1 a
1 b
2 b
[/Quote]
你试试呀,正确的
SELECT DISTINCT AA,BB FROM TB
--小F-- 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tossshinhwa 的回复:]
重新描述一下例子
有表A(aa,bb)如下:
aa bb
1 a
1 a
1 a
1 b
2 b
2 b
结果应该是:
1 a
1 b
2 b
[/Quote]
就用distinct
不信你自己去测试下
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
重新描述一下例子
有表A(aa,bb)如下:
aa bb
1 a
1 a
1 a
1 b
2 b
2 b
结果应该是:
1 a
1 b
2 b
htl258_Tony 2009-08-10
  • 打赏
  • 举报
回复
能举个典型例子吗,读起来绕绕的.
SQL77 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tossshinhwa 的回复:]
直接用distinct结果会比需要的少.

因为distinct aa之后,aa对应的bb可能有2个
[/Quote]
只有两个相同才会去掉,对应该两个不同是不会去掉的
TossShinHwa 2009-08-10
  • 打赏
  • 举报
回复
直接用distinct结果会比需要的少.

因为distinct aa之后,aa对应的bb可能有2个
--小F-- 2009-08-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-08-10 10:58:02
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([aa] int,[bb] varchar(1))
insert [tb]
select 1,'a' union all
select 1,'a' union all
select 1,'a' union all
select 2,'b' union all
select 2,'b' union all
select 2,'b' union all
select 3,'c' union all
select 3,'c' union all
select 3,'c' union all
select 3,'d' union all
select 4,'d' union all
select 4,'d' union all
select 4,'e' union all
select 5,'f' union all
select 5,'f' union all
select 5,'f'
--------------开始查询--------------------------

select aa,bb from [tb] group by aa,bb
----------------结果----------------------------
/*
aa bb
----------- ----
1 a
2 b
3 c
3 d
4 d
4 e
5 f

(所影响的行数为 7 行)
*/
soft_wsx 2009-08-10
  • 打赏
  • 举报
回复
关注
加载更多回复(3)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧