2014-10-19 51 views
0

我有三個表:如何在連接後列出不同的列並計數?

team(ID, name) 
goal(ID, team_ID, goalType_ID, date) 
goalType(ID, name) 

正如你所看到的,是TEAM_ID球隊表的ID,並goalType_ID是goalType表的ID。

對於所有團隊,我想列出發生過的不同類型的目標數量,如果沒有,則應該出現0。

我們不需要關心目標表,因爲我們並不需要的目標,所以我已經得到了只使用了前兩個表的跟蹤代碼的類型名稱:

SELECT team.ID, team.name, goal.goaType_ID 
FROM team LEFT JOIN goal ON team.ID=goal.team_ID 

結果是我想要的三列信息表,但我想要計算DISTINCT goalTypes和GROUP BY team.ID或team.name的數量,並將它保留三列,並且如果結果是null,顯示0(團隊可能沒有打進任何目標)。

結果表看起來是這樣的:

team.ID  team.name goalsType.ID 
1   Team_1  1 
2   Team_2  2 
2   Team_2  2 
2   Team_2  2 
3   Team_3  4 
4   Team_4  null 
5   Team_5  null 
6   Team_6  1 
6   Team_6  2 
6   Team_6  4 
6   Team_6  3 
7   Team_7  5 
7   Team_7  4 
8   Team_8  null 

我已經試過GROUP BY,DISTINCT的組合,和COUNT,但仍無法得到的結果我想要的。

也許我正在談論這一切都是錯誤的?任何幫助將不勝感激,謝謝。

編輯: 基於戈登·利諾夫的答案,我試圖做:

SELECT DISTINCT team.name, COUNT(goal.goalType_ID) 
FROM team LEFT JOIN goal ON team.ID=goal.team_ID 
GROUP BY team.ID, team.name 

,它會給我:

Name  #0 
Team_1  1 
Team_2  3 
Team_3  1 
Team_4  0 
Team_5  0 
Team_6  4 
Team_7  1 
Team_8  0 

如果我嘗試使用「DISTINCT team.ID,DISTINCT隊.name「,它會出錯。

回答

1

這是你想要的嗎?

SELECT team.ID, team.name, count(distinct goal.goalType_ID) as NumGoalTypes 
FROM team LEFT JOIN 
    goal 
    ON team.ID = goal.team_ID 
GROUP BY team.ID, team.name; 
+0

對不起,暫時沒有工作。這也給了我非常模糊的錯誤:「該命令包含一個或多個錯誤。[,,,,,]」 – PGT 2014-10-19 22:35:11

+0

@PGT。 。 。這似乎是一個奇怪的錯誤,只是對您的問題中的查詢進行了修改。 – 2014-10-19 22:39:24

+0

這是一個打印出來的前端錯誤,我沒有看到服務器端錯誤的特權。無論發生什麼樣的錯誤,它都會顯示錯誤。我會通過修改您的答案來更新說明。 – PGT 2014-10-19 22:40:12

1

試試這個http://sqlfiddle.com/#!3/8ec680/13

;WITH cte 
     AS (SELECT Row_number() OVER(partition BY tname 
        ORDER BY goalid), * from temp)--temp= Your join statement 
SELECT CASE 
     WHEN a.goalid IS NULL THEN 0 
     ELSE a.row_n 
     END [count], 
     a.tid, 
     a.tname, 
     a.goalid 
FROM cte a 
     JOIN (SELECT Max(row_n) row_n, 
        tname 
      FROM cte 
      GROUP BY tname) b 
     ON a.row_n = b.row_n 
     AND a.tname = b.tname