“>”我在前两张图片中有如下所示的数据。
dbo.Value1: ID Value Date
349383 -3268.32 7/14/2015
573832 -1732.24 7/14/2015
747583 49.85 7/14/2015
958383 231.36 7/14/2015
172737 1734.94 7/14/2015
593983 25908.29 7/14/2015
dbo.ProductValue: ProductID ProductValue UploadDate
NULL -6348 7/14/2015
958383 232 7/14/2015
172737 1735 7/14/2015
NULL 15392 7/14/2015
我想基于Value和Product Value列完全连接两个表,以便两个表基于最接近的值连接,如下所示。有谁知道我怎么能这样做?
enter code here: ID Value Date ProductID ProductValue UploadDate
349383 -3268.32 7/14/2015 NULL -6348 7/14/2015
573832 -1732.24 7/14/2015 NULL NULL NULL
747583 49.85 7/14/2015 NULL NULL NULL
958383 231.36 7/14/2015 958383 232 7/14/2015
172737 1734.94 7/14/2015 172737 1735 7/14/2015
593983 25908.29 7/14/2015 NULL 15392 7/14/2015
答案 0 :(得分:1)
不完全确定你要查找的是什么,但是这将匹配第二个表id vs productid中的行,如果productid为null,那么它将匹配所有行,并且行匹配最低价值与产品价值之间的差异是指定的价值。
select *
from
value v
outer apply (
select top 1 *, abs(p.productvalue - v.value) as diff
from productvalue p
where (p.productid = v.id or p.productid is null)
and not exists (select 1 from value v2 where
(p.productid = v2.id or p.productid is null) and
abs(p.productvalue - v.value) > abs(p.productvalue - v2.value))
order by case when p.productid is null then 2 else 1 end,
abs(p.productvalue - v.value) asc
) p
使用order by的外部应用将选择最匹配的行,其中的not exists
子句只会将其与具有最接近产品值的行匹配。
您可以在SQL Fiddle
中对此进行测试