2013-02-11 104 views
0

我有以下表格:如何獲得來自多個列的值的總和SQL

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 

季表示足球賽季,1,名稱顯示在一個給定的遊戲玩家位置 第1個目標指示進球數量名字1得分

我想爲每個賽季的每個名字生成一個列表,他們出場的次數和他們得分的目標數量。這樣的事情:

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 

任何幫助,將不勝感激!

+3

你不介意與我們分享至少一個相關的一塊你的努力 - [?你嘗試過什麼]剛剛在支持(http://whathaveyoutried.com/) – 2013-02-11 19:03:15

回答

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 

免責聲明:這是一個醜陋的查詢。

+0

謝謝你的解決方案!我想在MS Access中運行這個。 – 2013-02-11 19:24:09

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 

+0

呃,打2分鐘 – mbrowne81 2013-02-11 19:20:52

+0

謝謝你的解決方案! – 2013-02-11 19:24:33

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的子查詢。如果您僅使用UNION代替,則子查詢結果集將包含季節,播放器目標的每個組合僅包含一行。但是,當一名球員在一個賽季中在多場比賽中獲得相同數量的進球數時,您希望保留這些排中的每一排,以便準確計數所打的比賽數和總進球數。

在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 
+0

當我運行它時,我在Access 2007-10中出現數據類型不匹配錯誤。你會碰巧知道那是什麼嗎? – 2013-02-12 00:11:22

+0

我的字段類型是季節,長整數; Name1,Name2和Name3,文本;以及長整數的目標1,目標2和目標3。你的領域類型是什麼? – HansUp 2013-02-12 04:12:12