这段SQL如何写?(答案正确立即给分)

princesky 2003-08-25 10:59:32
1表A(关键字:公司)
公司 设备号
001 05001&25A
002 05002&25A
003 05003&25A

表B(关键字:设备号)
设备号 设备名
05001&25A 设备1
05001 设备2
05002 设备3

数据抽出条件:
表A和表B关联,用设备号取设备名,设备名取不到的情况下,取设备号前五位的设备名。

上面的查询结果为:
公司 设备号 设备名
001 05001&25A 设备1
002 05002 设备3

这段SQL该如何写?答对立即给分。
...全文
21 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-08-25
  • 打赏
  • 举报
回复
--测试:

declare @表A table(公司 varchar(10),设备号 varchar(100))
insert @表A values('001','05001&25A')
insert @表A values('002','05002&25A')
insert @表A values('003','05003&25A')

declare @表B table(设备号 varchar(10),设备名 varchar(100))
insert @表B values('05001&25A','设备1')
insert @表B values('05001','设备2')
insert @表B values('05002','设备3')

select aaa.公司,bbb.设备号,bbb.设备名 from @表A aaa join (select * from @表B tem where 设备号=(select max(设备号) from @表B where left(设备号,5)=left(tem.设备号,5))) bbb on aaa.设备号 like bbb.设备号+'%'

pengdali 2003-08-25
  • 打赏
  • 举报
回复
select aaa.公司,bbb.设备号,bbb.设备名 from 表A aaa join (
select * from 表B tem where 设备号=(select max(设备号) from 表B where left(设备号,5)=left(tem.设备号,5))
) bbb on aaa.设备号 like bbb.设备号+'%'
Ianlan 2003-08-25
  • 打赏
  • 举报
回复
select a.设备号,b.设备名说from a,b where a.设备号=b.设备号
union
select a.设备号,b.设备名说from a,b where left(a.设备号,5)=b.设备号
愉快的登山者 2003-08-25
  • 打赏
  • 举报
回复
select A.公司, B.设备号, B.设备名 from A, B
where A.设备号 = B.设备号
or (not exists (select * from B where 设备号 = A.设备号)) and left(A.设备号,5) = B.设备号
CrazyFor 2003-08-25
  • 打赏
  • 举报
回复
Or:


select * from b left join a on a.设备号=b.设备号 or (left(a.设备号,5)=left(b.设备号,5) and a.设备号<>b.设备号)
CrazyFor 2003-08-25
  • 打赏
  • 举报
回复
select * from b left join a on a.设备号=b.设备号
union all
select * from b left join a on left(a.设备号,5)=left(b.设备号,5) and a.设备号<>b.设备号


hjb111 2003-08-25
  • 打赏
  • 举报
回复
select a.公司,设备号,B.设备名 from 表A,表B where left(A.设备号,5)=left(B.设备号,5)
CrazyFor 2003-08-25
  • 打赏
  • 举报
回复
select * from b left join a on a.设备号=b.设备号
union all
select * from b left join a on left(a.设备号,5)=left(b.设备号,5) and a.设备号<>b.设备号


97866 2003-08-25
  • 打赏
  • 举报
回复
Select 公司,Max(设备号) as 设备号,设备名 from 表A a,表B b
where Left(a.设备号,5)=Left(b.设备号,5) Group by 设备名,公司
pengdali 2003-08-25
  • 打赏
  • 举报
回复
select * from (select *,(select top 1 设备名 from 表B where 表A.设备号 like 设备号+'%' order by case when 表A.设备号=设备号 then 0 else 1 end) 设备名 from 表A) tem where 设备名 is not null
happy_0325 2003-08-25
  • 打赏
  • 举报
回复
select 公司,设备号,case when
设备名 is null then select 设备名 from b where b.设备号=left(A.设备号,5)
else 设备名 end
from a,b where a.设备号=设备号
yangvxin1 2003-08-25
  • 打赏
  • 举报
回复
declare @表A table(公司 varchar(10),设备号 varchar(100))
insert @表A values('001','05001&25A')
insert @表A values('002','05002&25A')
insert @表A values('003','05003&25A')

insert @表A values('005','05001')

declare @表B table(设备号 varchar(10),设备名 varchar(100))
insert @表B values('05001&25A','设备1')
insert @表B values('05001','设备2')
insert @表B values('05002','设备3')

----------


--加个union吧,呵呵.
select aaa.公司,bbb.设备号,bbb.设备名 from @表A aaa inner join
(select * from @表B tem where 设备号=(select max(设备号) from @表B where left(设备号,5)=left(tem.设备号,5))) bbb
on aaa.设备号 like bbb.设备号+'%'

union

select aaa.公司,bbb.设备号,bbb.设备名 from @表A aaa inner join @表B bbb on
aaa.设备号=bbb.设备号
yangvxin1 2003-08-25
  • 打赏
  • 举报
回复

declare @表A table(公司 varchar(10),设备号 varchar(100))
insert @表A values('001','05001&25A')
insert @表A values('002','05002&25A')
insert @表A values('003','05003&25A')
insert @表A values('005','05001')

declare @表B table(设备号 varchar(10),设备名 varchar(100))
insert @表B values('05001&25A','设备1')
insert @表B values('05001','设备2')
insert @表B values('05002','设备3')

select aaa.公司,bbb.设备号,bbb.设备名 from @表A aaa join (select * from @表B tem where 设备号=(select max(设备号) from @表B where left(设备号,5)=left(tem.设备号,5))) bbb on aaa.设备号 like bbb.设备号+'%'

大力,你先取@表B的最大值会漏些数据。比如象上面05001不能取.
intactness 2003-08-25
  • 打赏
  • 举报
回复
select A.公司, B.设备号, B.设备名 from A, B
where A.设备号 = B.设备号
or (not exists (select * from B where 设备号 = A.设备号)) and left(A.设备号,5) = B.设备号

34,575

社区成员

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

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