sql关联表2条件的查询结果

panyong 2018-08-19 03:20:47

表1的记录 去匹配表2的条件 得出需要的结果
求SQL语句
...全文
697 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear SQL(燊) 2018-12-10
  • 打赏
  • 举报
回复
sql server 2016+
;
with 表一(日期, 发货, 规格, 车号, 吨位) as
(
    select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 20 union all
    select convert(date, '2018-08-18'), '单位1', '规格2', '1号车', 10 union all
    select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 10 union all
    select convert(date, '2018-08-20'), '单位1', '规格1', '1号车', 10 union all
    select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
    select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
    select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
    select convert(date, '2018-08-21'), '单位1', '规格2', '1号车', 10 union all
    select convert(date, '2018-08-22'), '单位1', '规格2', '1号车', 30
 
),
表二(日期, 发货, 规格, 单价) as
(
    select convert(date, '2018-08-05'), '单位1', '规格1', 50 union all
    select convert(date, '2018-08-05'), '单位1', '规格2', 60 union all
    select convert(date, '2018-08-19'), '单位1', '规格1', 90 union all
    select convert(date, '2018-08-19'), '单位1', '规格2', 100
)
SELECT a.*,b.单价,合计发货=a.吨位*b.单价
FROM 表一 A
INNER JOIN (SELECT startdate=日期,enddate=dateadd(day,-1,LEAD(日期)over(partition by 发货, 规格 order by 日期)),发货, 规格, 单价 FROM 表二
	) B  on a.发货 = b.发货 and a.规格 = b.规格 and a.日期 between startdate and isnull(enddate,getdate())
order by a.日期,a.发货,a.规格

日期         发货    规格    车号    吨位          单价          合计发货
---------- ----- ----- ----- ----------- ----------- -----------
2018-08-18 单位1   规格1   1号车   10          50          500
2018-08-18 单位1   规格1   1号车   20          50          1000
2018-08-18 单位1   规格2   1号车   10          60          600
2018-08-20 单位1   规格1   1号车   10          90          900
2018-08-21 单位1   规格1   1号车   10          90          900
2018-08-21 单位1   规格1   1号车   10          90          900
2018-08-21 单位1   规格1   1号车   10          90          900
2018-08-21 单位1   规格2   1号车   10          100         1000
2018-08-22 单位1   规格2   1号车   30          100         3000


道玄希言 2018-08-19
  • 打赏
  • 举报
回复
以上如果为降价时会出错.


;with 表一(日期, 发货, 规格, 车号, 吨位) as
(
select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 20 union all
select convert(date, '2018-08-18'), '单位1', '规格2', '1号车', 10 union all
select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-20'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格2', '1号车', 10 union all
select convert(date, '2018-08-22'), '单位1', '规格2', '1号车', 30

),
表二(日期, 发货, 规格, 单价) as
(
select convert(date, '2018-08-05'), '单位1', '规格1', 50 union all
select convert(date, '2018-08-05'), '单位1', '规格2', 60 union all
select convert(date, '2018-08-19'), '单位1', '规格1', 90 union all
select convert(date, '2018-08-19'), '单位1', '规格2', 100
)
select *, 吨位 * 单价 as 合计发货 from (
select *, (select top 1 单价 from 表二
where T1.发货 = 发货 and T1.规格 = 规格 and T1.日期 >= 日期
order by 日期 desc) as 单价
from 表一 as T1) as T



2018-08-18 单位1 规格1 1号车 20 50 1000
2018-08-18 单位1 规格2 1号车 10 60 600
2018-08-18 单位1 规格1 1号车 10 50 500
2018-08-20 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格2 1号车 10 100 1000
2018-08-22 单位1 规格2 1号车 30 100 3000
道玄希言 2018-08-19
  • 打赏
  • 举报
回复

;with 表一(日期, 发货, 规格, 车号, 吨位) as
(
select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 20 union all
select convert(date, '2018-08-18'), '单位1', '规格2', '1号车', 10 union all
select convert(date, '2018-08-18'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-20'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格1', '1号车', 10 union all
select convert(date, '2018-08-21'), '单位1', '规格2', '1号车', 10 union all
select convert(date, '2018-08-22'), '单位1', '规格2', '1号车', 30

),
表二(日期, 发货, 规格, 单价) as
(
select convert(date, '2018-08-05'), '单位1', '规格1', 50 union all
select convert(date, '2018-08-05'), '单位1', '规格2', 60 union all
select convert(date, '2018-08-19'), '单位1', '规格1', 90 union all
select convert(date, '2018-08-19'), '单位1', '规格2', 100
)
select *, 吨位 * 单价 as 合计发货 from (
select *, (select top 1 max(单价) from 表二 AS T
where T1.发货 = 发货 and T1.规格 = 规格 and T1.日期 >= 日期) as 单价
from 表一 as T1) as T


日期 发货 规格 车号 吨位 单价 合计发货
2018-08-18 单位1 规格1 1号车 20 50 1000
2018-08-18 单位1 规格2 1号车 10 60 600
2018-08-18 单位1 规格1 1号车 10 50 500
2018-08-20 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格1 1号车 10 90 900
2018-08-21 单位1 规格2 1号车 10 100 1000
2018-08-22 单位1 规格2 1号车 30 100 3000
u9085 2018-08-19
  • 打赏
  • 举报
回复
select a.* ,b.单价,a.吨位*b.单价 as 合计发货  from a left join b on a.单位=b.单位 and a.规格=b.规格 and a.日期=b.日期
panyong 2018-08-19
  • 打赏
  • 举报
回复
表2是表1的按日期来的调价,要对应到相应的记录中去,你这个查询不是要的结果哦...
u9085 2018-08-19
  • 打赏
  • 举报
回复
select a.* ,b.单价,a.吨位*b.单价 as 合计发货  from a left join b on a.单位=b.单位 and a.规格=b.规格

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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