簡體   English   中英

如何比較多個表中的記錄,但查找不同或缺失的值

[英]How do you compare records within the multiple tables but look for different or missing values

這是我的桌子的一個版本:

p.productid | pp.productid|  pp.productpricingid | p.erpsku | pp.countrycode | pp.productstatus
 1            1                    1             AAAAA        US             Active
 2            2                    2             BBBBB        US             Active
 3            3                    3             CCCCC        US             Active
 4            4                    4             DDDDD        US             Active

 1            1                    5             AAAAA        CA             Active
 2            2                    6             BBBBB        CA             Active
 3            3                    7             CCCCC        CA             InActive

所以我有2表產品,以及產品定價。 我需要編寫查詢的幫助,該查詢將提取在美國處於活動狀態但在CA中處於非活動狀態或不存在的所有值。 因此,對於上面的示例,應將valeus CCCCC和DDDDD拉出。 棘手的是,所有這些數據都存在於產品表和產品定價表中,我將它們合並成一個數據集。 然后,在該數據集中,我必須編寫另一個嵌套查詢,在其中找到所有差異。 現在,我可以找到不在US表中的所有值,但是我不確定此查詢是否正確。

這是我的查詢示例:

select p.erpsku from

product p, productpricing pp

where

p.productid = pp.productid

and pp.countrycode = 'us'

and pp.productstatus = 'Active'

and p.productid not in (select p.productid from product p, productpricing pp where p.productid = pp. productid and 

pp.countrycode = 'CA' )

但是我不確定此查詢是否完全正確。 我將不勝感激。

如果您包括丹尼(Danny)的建議,那么您做對了。 也許如果您將查詢構造為CTE ,解決方案對您來說將變得更加明顯?

create table #DataTable (
     erpsku varchar(20)
    ,countrycode char(2)
    ,productstatus varchar(8)
);


insert #DataTable
values
     ('AAAAA', 'US', 'Active')
    ,('BBBBB', 'US', 'Active')
    ,('CCCCC', 'US', 'Active')
    ,('DDDDD', 'US', 'Active');

-- All regions' data in one table
insert #DataTable
values
     ('AAAAA', 'CA', 'Active')
    ,('BBBBB', 'CA', 'Active')
    ,('CCCCC', 'CA', 'InActive');


;with US_Active as
(
    select
        erpsku
    from #DataTable
    where countrycode = 'US'
    and productstatus = 'Active'
)
, CA_Active as
(
    select
        erpsku
    from #DataTable
    where countrycode = 'CA'
    and productstatus = 'Active'
)
, US_Not_CA as
(
    select
        erpsku
    from US_Active
    EXCEPT
    select
        erpsku
    from CA_Active
)
select * from US_Not_CA;

為了簡單起見,我將您的示例表縮寫為。 我用erpsku做的事情也可以用ProdustID完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM