比较两个不同表中的值,并返回SQL Server中行中的任何值是否不同

时间:2018-05-08 09:27:31

标签: sql sql-server

我有两张表Product1 **和Product2

产品1

Product_id  Product_rev Product_Name    Product_description Product_owner   Product_Group   Product_TYPE
111 AAA CAR SPARE PARTS Nissan  Nissan  AUTOMOTIVE
222 BBB MODEL   DESGIN  NIFT    NIFT    FASHION
333 CCC REAR    REAR MATERIAL   KLM KLM GROUP   MANUFACTURING
444 DDD FINACLE 2.0 BANKING PRODUCT IFLEX   ORACLE  SOFTWARE
555 EEE TYRE    CEAR TYRES  TATA MOTORS TATA    AUTOMOTIVE

Product2_Transform

Product_id  Product_rev Product_Name    Product_description Product_owner   Product_Group   Product_TYPE
111 AAA CAR SPARE PARTS Ford    Ford    Nissan  AUTOMOTIVE LTD
222 BBB MODEL   DESGIN  NIFTY   NIFT    FASHION
333 CCC REAR Head Left  REAR MATERIAL   KLM KLM GROUP   MANUFACTURING
444 DDD FINACLE 2.5 BANKING PRODUCT Oracle IFLEX    ORACLE  SOFTWARE
555 EEE SEAT TYRE   CEAR TYRES  TATA BANCS  TATA    AUTOMOTIVE

我想要product1和product2中的差值并将其放在Product_post_validation表中。

Product_post_validation 表: -

Product_id  Product_rev validation_column    value_in_transform       value_in_output
111 AAA Product_description SPARE PARTS SPARE PARTS Ford
111 AAA Product_owner   Nissan  Ford
111 AAA Product_TYPE    AUTOMOTIVE  AUTOMOTIVE LTD
333 CCC Product_Name    REAR    REAR Head Left
444 DDD Product_Name    FINACLE 2.0 FINACLE 2.5
444 DDD Product_owner   IFLEX   Oracle IFLEX 
555 EEE Product_Name    TYRE    SEAT TYRE
555 EEE Product_owner   TATA MOTORS TATA BANCS

请帮助撰写查询...

1 个答案:

答案 0 :(得分:0)

我会先取消,然后join

with p1c as (
      select p1.product, p1.prev, v1.*
      from product p1 cross join
           (values ('Product_name', p1.Product_name),
                   ('Product_description', p1.Product_description),
                   ('Product_owner', p1.Product_owner),
                   ('Product_Group', p1.Product_Group),
                   ('Product_TYPE', p1. Product_TYPE)
           ) v1(validation_column, val)
     ),
     p2c as (
      select p2.product, p2.prev, v2.*
      from product_transform p2 cross join
           (values ('Product_name', p2.Product_name),
                   ('Product_description', p2.Product_description),
                   ('Product_owner', p2.Product_owner),
                   ('Product_Group', p2.Product_Group),
                   ('Product_TYPE', p2.Product_TYPE)
           ) v2(validation_column, val)
     )
select p1c.product_id, p1c.rev, p1c.validation_column,
       p1c.val, p2c.val   
from p1c join
     p2c
     on p1c.product_id = p2c.product_id and p1c.rev = p2c.rev and
        p1c.validation_column = p2c.validation_column and
        p1c.val <> p2c.val;