1

以前にこれについて質問しましたが、SQL ベースのソリューションに対して偏見があったことを認めなければならず、今ではその質問を見つけることができません。

私は2つのテーブルを持っています:

tblCurrent 
 Ref  | CustomerID | ... .. .. .  . |
X001
X002
X003


tblHistorical 
 Ref   | ... .. .. .  . |  Missing | Matched
X001   | ... .. .. .  . |  TRUE    | FALSE
X001   | ... .. .. .  . |  FALSE   | FALSE
X002   | ... .. .. .  . |  TRUE    | TRUE
X002   | ... .. .. .  . |  TRUE    | FALSE
X003   | ... .. .. .  . |  FALSE   | FALSE
X003   | ... .. .. .  . |  TRUE    | TRUE

Ref は tblCurrent では一意ですが、Historical では一意ではありません。

tblCurrent に基づいたビューを作成するにはどうすればよいですか? その結果、tblHistorical のレコード数をカウントする 3 つの追加の列が得られます。

  • Ref に一致 AND Missing が TRUE

  • Ref に一致 AND Missing は False

  • Ref に一致 AND Matched が True

同様の基準に基づいて tblHistorical のレコード数をカウントする列を追加する必要があることに注意してください。

4

4 に答える 4

3
SELECT R.Ref,
SUM(CASE WHEN H.Missing = TRUE THEN 1 ELSE 0 END) as MissingTrue,
SUM(CASE WHEN H.Missing = FALSE THEN 1 ELSE 0 END) as MissingFalse,
SUM(CASE WHEN H.Matched = TRUE THEN 1 ELSE 0 END) as MatchedTrue
FROM tblRef R JOIN tblHistorical H
ON R.Ref = H.Ref
于 2012-09-14T10:04:46.483 に答える
1
SELECT T.REF,
        COUNT(CASE WHEN H.MISSING = 'TRUE' THEN 1  END) AS MISSINGTRUE,
        COUNT(CASE WHEN H.MISSING = 'FALSE' THEN 1 END) AS MISSINGFALSE,
        COUNT(CASE WHEN H.MATCHED = 'TRUE' THEN 1  END) AS MATCHEDTRUE
FROM   TBLREF T 
JOIN   TBLHISTORICAL H
ON     R.REF = H.REF
GROUP BY T.REF
于 2012-09-14T10:16:31.463 に答える
1
SELECT R.Ref,
SUM(CASE WHEN H.Missing = TRUE THEN 1 ELSE 0 END) as MissingTrue,
SUM(CASE WHEN H.Missing = FALSE THEN 1 ELSE 0 END) as MissingFalse,
SUM(CASE WHEN H.Matched = TRUE THEN 1 ELSE 0 END) as MatchedTrue
FROM tblRef R 
INNER JOIN tblHistorical H
ON R.Ref = H.Ref
Group by R.Ref
于 2012-09-14T10:08:23.077 に答える
1

テーブルに存在しない場合がLEFT JOINあるため、これを使用する必要があると思います。reftblHistorical

SELECT  a.ref,
        SUM(CASE WHEN b.Missing = 'True' THEN 1 ELSE 0 END) missingTrue,
        SUM(CASE WHEN b.Missing = 'False' THEN 1 ELSE 0 END) missingFalse,
        SUM(CASE WHEN b.Matched = 'True' THEN 1 ELSE 0 END) matchTrue
FROM    tblCurrent a
        LEFT JOIN tblHistorical b
            on a.ref = b.ref
GROUP BY a.ref
于 2012-09-14T10:06:33.867 に答える