0

まったく同じ構造を持つ 2 つのテーブルの行間のデルタを計算したいのですが、必ずしも同じデータであるとは限りません。

表 1 (予測)

ID | 名前 | GP | ガ | あ

表1(実績データ)

ID | 名前 | GP | ガ | あ

結果 (ID で一致):

ID | (GP1-GP2) AS デルタGP | (G1-G2) AS DeltaG | (A1-A2) AS デルタ A |

私のドリフトをキャッチしますか?これは、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

問題は結果が正しくないことです:

予測 (合計)

PlayerName GP ゴール アシスト

シドニー・クロスビー 56 28 34

実績データ(SUM)

PlayerName GP ゴール アシスト

シドニー・クロスビー 26 17 24

結果

シドニー・クロスビー 28 -42 -98

4

2 に答える 2

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
于 2012-12-14T20:52:19.770 に答える
0

id 列で 2 つのテーブルを結合する必要があります。

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 Server Join の概要については、こちらの投稿シリーズをご覧ください: 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;

要件によっては、SUM の代わりに AVG を使用することもできます。

于 2012-12-14T20:57:53.550 に答える