2011-10-17 1 views
2

私はNetezzaでいくつかのQAを実行しており、2つの別々のSQLステートメントからカウントを比較する必要があります。これは現在使用しているSQLですSQLで2つのカウントの違いを得る

SELECT COUNT(*) AS RECORD_COUNT 
FROM db..EXT_ACXIOM_WUL_FILE A 
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,mid_key from db..F_EMAIL) B 
ON A.MID_KEY=B.MID_KEY 
MINUS 
SELECT COUNT(*) 
FROM db..EXT_ACXIOM_WUL_FILE A 

しかし、MINUSはそのようには動作しません。カウントが一致すると、0を返す代わりに、Record_countにnullが返されます。私は基本的に計算されるべきレコード数を計算します:

record_count=count1-count2 

したがって、カウントが等しい場合は0、それ以外の場合は0になります。これに対して正しいSQLは何ですか?

答えて

3
SELECT 
(
SELECT COUNT(*) AS RECORD_COUNT 
FROM db..EXT_ACXIOM_WUL_FILE A 
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,mid_key from db..F_EMAIL) B 
ON A.MID_KEY=B.MID_KEY 
) - 
(
SELECT COUNT(*) 
FROM db..EXT_ACXIOM_WUL_FILE A 
) TotalCount 

OracleのMINUS(SQL ServerのEXCEPTは)まったく違う動物である:)

あなたがUNIONを理解してからセットを考える場合、あなたはMINUS/EXCEPT

1

MINUSを理解するの違いを設定して、算術演算ではありません。あなたは

SELECT COUNT(*) - (SELECT COUNT(*) 
        FROM db..EXT_ACXIOM_WUL_FILE A) AS Val 
FROM db..EXT_ACXIOM_WUL_FILE A 
     LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL, 
            mid_key 
        from db..F_EMAIL) B 
     ON A.MID_KEY = B.MID_KEY 

それとも別のオプション

SELECT COUNT(*) - COUNT(DISTINCT A.PrimaryKey) AS Val 
FROM db..EXT_ACXIOM_WUL_FILE A 
     LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL, 
            mid_key 
        from db..F_EMAIL) B 
     ON A.MID_KEY = B.MID_KEY 
0

を行うことができ

私は、これはあなたが

SELECT COUNT(distinct(CURRENTLY_OPTED_IN_FL + F_EMAIL.MID_KEY)) - count(distinct(EXT_ACXIOM_WUL_FILE.MID_KEY)) 
    FROM EXT_ACXIOM_WUL_FILE 
    LEFT OUTER JOIN F_EMAIL 
     ON JOIN F_EMAIL.MID_KEY = EXT_ACXIOM_WUL_FILE.MID_KEY 
探しているものかもしれないと思います
関連する問題