返回两个SQL表的最佳值以及表1中表2中不匹配的值
我正在SQL Server 2012中处理一个SQL查询,该查询应比较两个表中类型为double的两列,并返回两个表中较大的值,这可以使用SQL联接完成,但我想要的不仅仅是,它还应该返回第二个表中不匹配的行,如果其中一个值较大,另一个值较小,它还应该在一个字段中放置一个空值 例如,我有两个带有以下行的表返回两个SQL表的最佳值以及表1中表2中不匹配的值,sql,sql-server,join,Sql,Sql Server,Join,我正在SQL Server 2012中处理一个SQL查询,该查询应比较两个表中类型为double的两列,并返回两个表中较大的值,这可以使用SQL联接完成,但我想要的不仅仅是,它还应该返回第二个表中不匹配的行,如果其中一个值较大,另一个值较小,它还应该在一个字段中放置一个空值 例如,我有两个带有以下行的表T1和T2 表T1 Product Price Tax Pen 10 2.5 Pencil 5 1.25 Paper 15 3.2 Board 25 5
T1
和T2
表T1
Product Price Tax
Pen 10 2.5
Pencil 5 1.25
Paper 15 3.2
Board 25 5.26
Water 2 NULL
表T2
Product Price Tax
Pencil 8 2.5
Paper 12 4.2
Board NULL 4.26
Water 1 2.5
Book 10 5
在上面两个表上运行SQL查询时,结果应该如下
结果
Product Price Tax
Pen 10 2.5
Pencil 8 2.5
Paper 15 4.2
Board 25 5.26
Water 2 2.5
根据上述数值,我们可以看到,第二个表与
product
Pen
不匹配,这是第一个表的第一行,因此结果表应该包含整行,但与product
Book
不同,后者是第二个表的最后一行,在第一个表中不匹配,因此记录应丢弃,并且NULL
值应替换为T1或T2
中其他表中的值。您需要执行左外联接
,然后比较值:
select t1.product,
(case when t1.price >= t2.price then t1.price
when t2.price > t1.price then t2.price
else coalesce(t1.price, t2.price)
end) as price,
(case when t1.tax >= t2.tax then t1.tax
when t2.tax > t1.tax then t2.tax
else coalesce(t1.tax, t2.tax)
end) as tax
coalesce(t1.tax,t2.tax) as tax
from table1 t1 left join
table2 t2
on t1.product = t2.product;