求一SQL语句。高分相送

qinguangjun123 2004-11-24 01:34:34
A表:
字段 AA BB CC
数据 A1 B1 C1
A2 B2 C2

B表
字段 AA DD
数据 A1 D1
A1 D2
A2 D3
根据A表的AA求结果
字段 AA DD
数据 A1 D1等
A2 D3
即当B表中的数据为多条时,就用一个数据+“等”表示。谢谢大哥们,来帮忙。
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复
我的意思是经常在SQL版的,一般是对SQL熟悉,不一定对oracle熟悉,到oracle版的人多数是对oracle熟悉的,这样解决问题容易
qinguangjun123 2004-11-24
  • 打赏
  • 举报
回复
zjcxc(邹建):
俺是感到,sql-server 里面的人多。望斑竹原谅。
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复
既然是oracle的处理,建议转到oracle版去问
qinguangjun123 2004-11-24
  • 打赏
  • 举报
回复
以上的大哥们,在oracle 中不能用case when ,应该怎么办?
davorsuker39 2004-11-24
  • 打赏
  • 举报
回复
select a.AA,b.DD
from A left join(select AA,DD=min(DD)+case when count(*)=1 then '' else '等' end
from B group by AA)b on a.AA=b.AA
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复
--测试数据
create table A(AA varchar(10),BB varchar(10),CC varchar(10))
insert A select 'A1','B1','C1'
union all select 'A2','B2','C2'

create table B(AA varchar(10),DD varchar(10))
insert B select 'A1','D1'
union all select 'A1','D2'
union all select 'A2','D3'
go

--查询
select a.AA,b.DD
from A left join(
select AA,DD=min(DD)+case when count(*)=1 then '' else '等' end
from B group by AA
)b on a.AA=b.AA
go

--删除测试
drop table A,B

/*--测试结果

AA DD
---------- ------------
A1 D1等
A2 D3

(所影响的行数为 2 行)
--*/
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复

--看来是我理解错了

--这样
select a.AA,b.DD
from A left join(
select AA,DD=min(DD)+case when count(*)=1 then '' else '等' end
from B group by AA
)b on a.AA=b.AA
lsxaa 2004-11-24
  • 打赏
  • 举报
回复
select a.AA,
(case when (select count(*) from b where AA=a.AA)=0 then ''
when (select count(*) from b where AA=a.AA)=1 then
(selec top 1 DD from b where AA=a.AA)
when (select count(*) from b where AA=a.AA)>1 then
(selec top 1 DD from b where AA=a.AA)+'等'
end ) as DD
from a
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复
--是这样的吗?

--测试数据
create table A(AA varchar(10),BB varchar(10),CC varchar(10))
insert A select 'A1','B1','C1'
union all select 'A2','B2','C2'

create table B(AA varchar(10),DD varchar(10))
insert B select 'A1','D1'
union all select 'A1','D2'
union all select 'A2','D3'
go

--查询处理的函数
create function f_qry(
@AA varchar(10)
)returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+'+'+rtrim(DD)
from B where AA=@AA
return(stuff(@r,1,1,''))
end
go

--调用实现查询
select a.AA,DD=dbo.f_qry(AA) from A
go

--删除测试
drop table A,B
drop function f_qry

/*--测试结果

AA DD
---------- -----------
A1 D1+D2
A2 D3

(所影响的行数为 2 行)
--*/
zjcxc 元老 2004-11-24
  • 打赏
  • 举报
回复
即当B表中的数据为多条时,就用一个数据+“等”表示

什么意思啊?

34,575

社区成员

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

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