2012-12-14 51 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