我有一张名为Form的表。我将它简化为如下:
FormID Ref Premium
1 AA 1000
1 BB 900
1 CC 600
1 DD 100
2 AA 0
2 BB 0
2 CC 0
7 AA 211
7 BB 101
7 CC 300
例如,假设FormID = 1对应2013年数据,FormID = 7对应2012年数据(去年)。
我想要加入的数据,以便我希望这张表出来:
CurrentFormID PriorFormID Ref PremiumCurrent PremiumPrior
1 7 AA 1000 211
1 7 BB 900 101
1 7 CC 600 300
1 NULL (OR 7) DD 100 NULL (OR 0)
基本上我需要类似于外连接的东西,我将CurrentFormID,PriorFormID指定为变量(即1和7)。引用必须相同或旧数据中的引用必须为null。
下面的查询是一个开始,但我只回到重叠的值(即两个集合中常见的引用。我还需要获取前一个表单中没有引用匹配的条目。
SELECT
*
FROM
Form X
OUTER JOIN Form Y
ON (X.FormID = @CurrentFormID AND Y.FormID = @PriorFormID) -
WHERE X.Reference = Y.Reference
ORDER BY X.Reference
我希望我有道理。
答案 0 :(得分:0)
您应该交换ON和WHERE子句:
SELECT
*
FROM
Form X
OUTER JOIN Form Y
ON X.Reference = Y.Reference
WHERE X.FormID = @CurrentFormID AND (Y.FormID IS NULL OR Y.FormID = @PriorFormID)
ORDER BY X.Reference
答案 1 :(得分:0)
SELECT
X.FormId AS CurrentFormId,
Y.FormId AS PriorFormId,
X.Ref,
X.Premium AS CurrentPremium,
Y.Premium AS PriorPremium
FROM
#MyTable X
LEFT JOIN
(SELECT * FROM #MyTable WHERE FormId <> @CurrentFormId) Y
ON
X.Ref = Y.Ref
WHERE
X.FormId = @CurrentFormId AND (Y.FormId = @PriorFormId OR Y.FormId IS NULL)
或者,子查询可以像这样构建:
(SELECT * FROM #MyTable WHERE FormId = @PriorFormId) Y