Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回两个SQL表的最佳值以及表1中表2中不匹配的值_Sql_Sql Server_Join - Fatal编程技术网

返回两个SQL表的最佳值以及表1中表2中不匹配的值

返回两个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

我正在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.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;