两张表求MAX的难点,还望大神看看怎么写SQL语句?

HQSummer 2017-02-13 02:44:55
现在有两张表,一张表示商品代码表,另外一张是关于商品运费的表。表结构如下
Product(商品名称表) LS(运费表)
FGUID SPDM(商品代码) GUID WLFY(物流费用)
a A1 a 10
a A2 b 20
a A3
b B1
b B2

FGUID 表示订单号,一个订单中可以有多个商品,GUID表示订单号,WLFY表示这个订单的总物流费用,
现在想要两张表联查,得到下面的效果,请问大神们,有没有什么办法?我用左右连接就会得到全部是A1,A2,A3的WLFY全是10 ;B1,B2的WLFY全部是20
FGUID SPDM GUID WLFY
a A1 a 10
a       A2 a 0
a A3 a 0
b B1 b 20
b B2 b 0
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-02-13
  • 打赏
  • 举报
回复
语句:
--测试数据
--测试数据
;WITH Product(FGUID,SPDM)AS(
select 'a','A1' union all
select 'a','A2' union all
select 'a','A3' union all
select 'b','B1' union all
select 'b','B2'
),LS([GUID],WLFY) AS (
select 'a',10 union all
select 'b',20
)
--测试数据结束
--查询语句
SELECT c.* ,
[GUID] ,
CASE WHEN ROW_NUMBER() OVER ( PARTITION BY c.FGUID ORDER BY SPDM ) = 1
THEN WLFY
ELSE 0
END AS WLFY
FROM LS b ,
Product c
WHERE b.GUID = c.FGUID



结果:



卖水果的net 2017-02-13
  • 打赏
  • 举报
回复

create table a(fguid int, anum int);
create table b(fguid int, bnum int);
insert into a values(1,11),(1,22),(1,33),(2,2),(2,3),(2,4)
insert into b values(1,30),(2,40)
go
with aa as(
select row_number() over(partition by fguid order by (select 1)) rn, * from a
),
bb as (
select row_number() over(partition by fguid order by (select 1)) rn, * from b
)
select  aa.*, isnull(bb.bnum,0) bnum
from aa 
left join bb on aa.fguid = bb.fguid and aa.rn = bb.rn 
go

drop table a,b
go



rn                   fguid       anum        bnum
-------------------- ----------- ----------- -----------
1                    1           11          30
2                    1           22          0
3                    1           33          0
1                    2           2           40
2                    2           3           0
3                    2           4           0

(6 行受影响)


HQSummer 2017-02-13
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
两个原表先用row_number 按 guid 分组生成一个 序列号,再用这个 guid 和 这个序号关联。
大神 能否写下SQL语句 这样看的更直观点
HQSummer 2017-02-13
  • 打赏
  • 举报
回复
大神 能否写下SQL语句 这样看的更直观点
卖水果的net 2017-02-13
  • 打赏
  • 举报
回复
两个原表先用row_number 按 guid 分组生成一个 序列号,再用这个 guid 和 这个序号关联。

22,209

社区成员

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

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