LTFT JION查询问题

zhongtao2005_2016 2019-04-20 11:57:31
A表里面有
wlbh:3212501-101 sl:20
wlbh:3212501-102 sl:20
wlbh:3212501-103 sl:20
wlbh:3212501-104 sl:20
B表里面有
wlbh:3212501-101 gg:A20 bb:01
wlbh:3212501-101 gg:A20 bb:02
wlbh:3212501-101 gg:A20 bb:03

我用left jion进行AB表进行关联查询,但是出来的数据包括B表全出来了,我想根据BB这个字段求最大的值,

我想生成以A表为准,数据全部出来,去掉B表里抽BB:01 和BB:02以BB:04最大的为准
...全文
290 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
holleno 2019-05-03
  • 打赏
  • 举报
回复
引用 8 楼 zhongtao2005_2016 的回复:
麻烦大家看下,红色部份是出现相同了,最后一列是00 01 02,我只想显示02这行一行,但是其它数据也要显示出来。目前要么显示02这一行,要么就出现其它列为NULL
我上面提供的方法是否有试过?
zhongtao2005_2016 2019-04-23
  • 打赏
  • 举报
回复
不会哟,用JOIN是全部连接多吗
xiaoxiangqing 2019-04-23
  • 打赏
  • 举报
回复
用join联接就行了
xzxmustwin 2019-04-23
  • 打赏
  • 举报
回复
引用 8 楼 zhongtao2005_2016 的回复:
麻烦大家看下,红色部份是出现相同了,最后一列是00 01 02,我只想显示02这行一行,但是其它数据也要显示出来。目前要么显示02这一行,要么就出现其它列为NULL

上面都说了用开窗函数啊
mssql 不像mysql 有limit可以方便取具体某条数据,个人认为用开窗函数解决类似的问题是最简单的 。
yilanwuyu123 2019-04-22
  • 打赏
  • 举报
回复
数据库 JOIN , ON 条件 MAX 了解一下, MAX结果 JOIN B表。拿走不谢。
zhongtao2005_2016 2019-04-22
  • 打赏
  • 举报
回复
select CASE WHEN [parentid]='root' THEN 0 ELSE 1 END FLAG,a.parentid,a.partid,a.BOMNAME,a.FATHERPARTVAR,a.CHINANAME,a.COUNTS,a.COMPAREPART,b.PARTFIXEDBACK1,b.PARTSTATE,b.kind,b.source,b.CHINADGREE,b.partvar,
(select max(b.partvar) from BOM_017 a
left join BOM_027 b on a.partid=b.partid
where a.parentid like 'root' and a.partid ='3211512-07-01' or a.parentid = '3211512-07-01' or a.bomname like'3211512-07-01%') as partvar2
from BOM_017 a
left join BOM_027 b on a.partid=b.partid
where a.parentid like 'root' and a.partid ='3211512-07-01' or a.parentid = '3211512-07-01' or a.bomname like'3211512-07-01%' order by flag asc

b.partvar就是00 01 02
a.partid就是3212515-103
zhongtao2005_2016 2019-04-22
  • 打赏
  • 举报
回复
麻烦大家看下,红色部份是出现相同了,最后一列是00 01 02,我只想显示02这行一行,但是其它数据也要显示出来。目前要么显示02这一行,要么就出现其它列为NULL
zhongtao2005_2016 2019-04-22
  • 打赏
  • 举报
回复
zhongtao2005_2016 2019-04-20
  • 打赏
  • 举报
回复
BB:03最大的为准
nongen 2019-04-20
  • 打赏
  • 举报
回复
select a.wlbh,a.sl,b.gg,b.bb from a left join (select wlbh,gg,max(bb) as bb from b group by wlbh,gg) b on a.wlbh=b.wlbh
xzxmustwin 2019-04-20
  • 打赏
  • 举报
回复
引用 4 楼 xzxmustwin 的回复:
利用开窗函数over给B表按wlbh分类并排序,取每种wlbh的第一条(每个第一条数据就是最大的)。

;with cte as (
 select wlbh,gg,bb.row_number() over (partition by wlbh order by bb desc) as number  from B
)

select A.*,cte.gg,cte.bb from A
left join cte on cte.wlbh = A.wlbh
where  cte.number = 1


;with cte as (
 select wlbh,gg,bb,row_number() over (partition by wlbh order by bb desc) as number  from B
)

select A.*,cte.gg,cte.bb from A
left join cte on cte.wlbh = A.wlbh
where  cte.number = 1

有个字符打错了
xzxmustwin 2019-04-20
  • 打赏
  • 举报
回复
利用开窗函数over给B表按wlbh分类并排序,取每种wlbh的第一条(每个第一条数据就是最大的)。

;with cte as (
 select wlbh,gg,bb.row_number() over (partition by wlbh order by bb desc) as number  from B
)

select A.*,cte.gg,cte.bb from A
left join cte on cte.wlbh = A.wlbh
where  cte.number = 1

holleno 2019-04-20
  • 打赏
  • 举报
回复
思路是: 要关联的记录属于该表中 部分字段相同,但某些字段为极值的情况 可以使用exists 来过滤. SELECT A.* , B.* FROM A LEFT JOIN B ON A.wlbh =b.wlbh AND NOT EXISTS (SELECT TOP 1 1 FROM B AS C WHERE C.wlbh =B.wlbh AND C.bb > B.bb)
卖水果的net 2019-04-20
  • 打赏
  • 举报
回复
-- 大概这样的一个用法 select a.*, b.* from a outer apply (select top 1 * from b where a.id = b.id order by b.xx ) b

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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