2012-12-14 79 views
0

我想计算具有完全相同结构但不一定是相同数据的两个表之间的差值。比较SQL中两个表之间的差异(错误)

表1(预测)

ID |名称| GP | G |甲

表1(实际数据)

ID |名称| GP | G |一个

结果(通过ID不匹配):

ID | (GP1-GP2)AS DeltaGP | (G1-G2)AS DeltaG | (A1-A2)AS DeltaA |

赶上我的漂移?这是caclulate预测模型的误差在SSAS

这里是我的代码:

SELECT P.[Player_id] 
      ,P.[PlayerName] 
      ,sum(P.[Games Played])-sum(S.[GamesPlayed]) AS GP 
      ,sum(P.[Total Goals])-sum(s.[TotalGoals]) AS Goals 
      ,sum(P.[Total Assists])-sum(s.[TotalAssists]) AS Assists 
FROM [PredictionsPlayersHistory] as P 
JOIN [V_StatsPlayers] AS S on p.pLAYER_id = s.Player_id  
where S.LastPlayedDate >= '2010-02-01' and P.Player_id 
    = 8471675 group by P.[Player_id],P.[PlayerName] 
order by Goals desc, Assists desc, GP asc 

问题是结果的arent权:

预测(SUM)

PlayerName GP进球助攻

西德尼克罗斯比56 28 34

实际数据(SUM)

PlayerName GP目标协助

悉尼克罗斯比26 17 24

结果

悉尼克罗斯比28 -42 -98

+0

您是通过'Id'分组的,所以您必须对每个'Id'有多个预测和结果?如果是这种情况,请确保您确认您的预期结果与'预测'和'实际'匹配是否正确。如果只有一个预测,那么不要使用'group by',因为它只是混淆了问题。 –

回答

0

你需要加入id列上两个表:

SELECT a.Id,a.Name, a.GP - p.GP AS DeltaGP, a.G - p.G AS DeltaG, a.A - p.A AS DeltaA 
FROM dbo.table1 AS a --actual values 
JOIN dbo.table2 AS p --predictions 
ON a.Id = p.Id; 

的介绍,SQL服务器将加入检查出我的帖子系列在这里:http://sqlity.net/en/1146/a-join-a-day-introduction/


编辑:如果你在每个表中每个玩家多行你需要它们聚集在加入之前:

SELECT a.Id, 
     a.Name, 
     a.GP - p.GP AS DeltaGP, 
     a.G - p.G AS DeltaG, 
     a.A - p.A AS DeltaA 
FROM (
      SELECT Id, 
        Name, 
        SUM(GP) AS GP, 
        SUM(G) AS G, 
        SUM(A) AS A 
      FROM dbo.table1 
      GROUP BY Id, 
        Name 
     ) AS a --actual values 
JOIN (
      SELECT Id, 
        SUM(GP) AS GP, 
        SUM(G) AS G, 
        SUM(A) AS A 
      FROM dbo.table2 
      GROUP BY Id 
     ) AS p 
     --predictions 
    ON a.Id = p.Id; 

根据您的要求,您可能想要使用AVG而不是SUM。

+0

看到我的编辑上面请 –

+0

看到我的回答编辑上面 –

+0

作品!谢谢! –

0

你可以通过ID连接表吗?如果我得到它的权利,那么:

SELECT table1.id, table1.name, 
     (table1.gp - table2.gp) as DeltaGP, 
     (table1.g - table2.g) as DeltaG, 
     (table1.a - table2.a) as DeltaA 
FROM table1 
JOIN table2 
ON table1.id = table2.id