1

我之前确实问过这个问题,但必须承认对基于 SQL 的解决方案有偏见,现在我找不到这个问题,所以我会再试一次,仔细措辞并对提供的任何解决方案持更开放的态度。

我有两张桌子:

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 中的记录数:

  • 匹配 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

我认为您需要使用LEFT JOIN它,因为有时ref可能不存在于tblHistorical桌子上。

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 回答
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
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 回答