0

次の表があります。

Season  Name1   Goal1   Name2   Goal2   Name3   Goal3
1990    Smith   2       Abel    1       John    3
1990    Smith   1       Abel    1       John    1
1990    John    0       Smith   2       Abel    5
1991    John    1       Smith   1       Abel    2
1991    Abel    2       John    0       Smith   0
1992    Abel    3       John    0       Smith   1

Season はサッカーのシーズンを示し、name1、name2 は特定のゲームでの選手の位置を示します Goal1 は Name1 が得点したゴールの数を示します

シーズンごとに名前ごとに、プレーした回数と得点したゴールの数のリストを生成したいと思います。このようなもの:

Abel 1990 3 games played 7 goals scored
Abel 1991 2 games played 4 goals scored 
Abel 1992 1 games played 3 goals scored 
John 1990 3 games played 2 goals scored

どんな助けでも大歓迎です!

4

3 に答える 3

2
SELECT
    sub.player,
    sub.Season,
    Count(*) AS games_played,
    Sum(sub.goals) AS SumOfgoals
FROM
    (
        SELECT Season, Name1 AS player, Goal1 AS goals
        FROM YourTable
        UNION ALL
        SELECT Season, Name2, Goal2
        FROM YourTable
        UNION ALL
        SELECT Season, Name3, Goal3
        FROM YourTable
    ) AS sub
GROUP BY sub.player, sub.Season
ORDER BY sub.player, sub.Season;

そのサブクエリで使用する必要があることに注意してください。UNION ALL代わりにjust を使用すると、サブクエリの結果セットには、 Seasonplayer、およびgoalUNIONの組み合わせごとに 1 つの行のみが含まれます。しかし、プレーヤーがシーズン中に複数のゲームで同じ数のゴールを決めた場合、プレイしたゲーム数と合計得点数を正確にカウントできるようにするために、それらの各行を保持する必要があります。

Access 2007 でサンプル データを使用すると、そのクエリによってこの結果セットが生成されます。

player Season games_played SumOfgoals
Abel     1990            3          7
Abel     1991            2          4
Abel     1992            1          3
John     1990            3          4
John     1991            2          1
John     1992            1          0
Smith    1990            3          5
Smith    1991            2          1
Smith    1992            1          1
于 2013-02-11T19:53:31.010 に答える
1

さて、使用している RDBMS を共有していないので、この (醜い) クエリはそれらのほとんどで機能すると思います。

SELECT  Name + ' ' + CAST(Season AS VARCHAR(4)) + ' ' +
        CAST(Games AS VARCHAR(4)) + ' games played ' + 
        CAST(Goals AS VARCHAR(4)) + ' goals scored' AS YourColumn
FROM (  SELECT Season, Name, SUM(Goals) AS Goals, COUNT(*) AS Games
        FROM (  SELECT Season, Name1 AS Name, Goal1 AS Goals
                FROM YourTable
                UNION ALL
                SELECT Season, Name2 AS Name, Goal2 AS Goals
                FROM YourTable
                UNION ALL
                SELECT Season, Name3 AS Name, Goal3 AS Goals
                FROM YourTable) AS A
        GROUP BY Season, Name) X

免責事項: これは醜いクエリです。

于 2013-02-11T19:09:05.777 に答える
0

これは非常に複雑ですが、すべてを適切なテーブル形式にするインライン クエリを記述して、通常の集計とグループ化を行うことができます。列の数に応じて、1 から x までの共用体を追加し続けます。

SELECT Season, Name, Sum(Goals)
FROM (SELECT Season, Name1 as Name, Goals1 as Goals        
        FROM table
      UNION
      SELECT Season, Name2 as Name, Goals2 as Goals        
        FROM table
      UNION
      SELECT Season, Name3 as Name, Goals3 as Goals        
        FROM table) newtable
GROUP BY Season, Name

于 2013-02-11T19:10:31.250 に答える