2013-04-25 55 views
0

我有一個數據集見下圖:更新的DataSet加caclulated領域

SELECT jockey.jockey_skey 
, raceresults.place 
FROM jockey 
     INNER JOIN runnersandriders 
       ON jockey.jockey_skey = runnersandriders.jockey_skey 
     INNER JOIN horse 
       ON runnersandriders.horse_skey = horse.horse_skey 
     INNER JOIN raceresults 
       ON horse.horse_skey = raceresults.horse_skey 
GROUP BY jockey.jockey_skey, 
      raceresults.place 
ORDER BY jockey.jockey_skey 

這爲我提供了:

Jockey_Skey Place 
1    01 
1    04 
2    03 
2    04 
3    02 
3    02 

我想要做的就是算一個賽馬有多少場比賽跑和他們來的清單。

因此,騎師1,賽程2次,第一次和第四次如此如此,但對於我的生活,我不記得如何去做。

我希望你能幫上忙。

感謝

W¯¯

回答

1

你可以使用這樣的事情讓每個騎師的結果一行:

SELECT jockey.jockey_skey, 
     TotalRaces = COUNT(*), 
     [1sts] = COUNT(CASE WHEN raceresults.place = '01' THEN 1 END), 
     [2nds] = COUNT(CASE WHEN raceresults.place = '02' THEN 1 END), 
     [3rds] = COUNT(CASE WHEN raceresults.place = '03' THEN 1 END), 
     [4ths] = COUNT(CASE WHEN raceresults.place = '04' THEN 1 END), 
     [5ths] = COUNT(CASE WHEN raceresults.place = '05' THEN 1 END), 
     [6ths] = COUNT(CASE WHEN raceresults.place = '06' THEN 1 END), 
     [7ths] = COUNT(CASE WHEN raceresults.place = '07' THEN 1 END), 
     [8ths] = COUNT(CASE WHEN raceresults.place = '08' THEN 1 END), 
     -- etc 
     [NonRunner] = COUNT(CASE WHEN raceresults.place = 'NR' THEN 1 END), 
     [Fell] = COUNT(CASE WHEN raceresults.place = 'F' THEN 1 END), 
     [PulledUp] = COUNT(CASE WHEN raceresults.place = 'PU' THEN 1 END), 
     [Unseated] = COUNT(CASE WHEN raceresults.place = 'U' THEN 1 END), 
     [Refused] = COUNT(CASE WHEN raceresults.place = 'R' THEN 1 END), 
     [BroughtDown] = COUNT(CASE WHEN raceresults.place = 'B' THEN 1 END) 
FROM jockey 
     INNER JOIN runnersandriders 
      ON jockey.jockey_skey = runnersandriders.jockey_skey 
     INNER JOIN horse 
      ON runnersandriders.horse_skey = horse.horse_skey 
     INNER JOIN raceresults 
      ON horse.horse_skey = raceresults.horse_skey 
GROUP BY jockey.jockey_skey 
ORDER BY jockey.jockey_skey 

Simplified Example on SQL Fiddle

另外,您可以使用WITH ROLLUP獲得總計額外的一行:

SELECT jockey.jockey_skey, 
     raceresults.place, 
     [CountOfResult] = COUNT(*) 
FROM jockey 
     INNER JOIN runnersandriders 
      ON jockey.jockey_skey = runnersandriders.jockey_skey 
     INNER JOIN horse 
      ON runnersandriders.horse_skey = horse.horse_skey 
     INNER JOIN raceresults 
      ON horse.horse_skey = raceresults.horse_skey 
GROUP BY jockey.jockey_skey, raceresults.place 
WITH ROLLUP 
ORDER BY jockey.jockey_skey, raceresults.place; 

NULL值代表共計

Simplified Example on SQL Fiddle

+0

喜加雷斯選項1將是完美的,但我的地方字段是VARCHAR(50),這是因爲我有事情喜歡NR,PU等這樣第一個選項給我錯誤信息 Msg 245,Level 16,State 1,Line 1 將varchar值'NR'轉換爲數據類型int時轉換失敗。 – wafw1971 2013-04-25 10:43:45

+0

你只需要把數字放在引號內'01'或'1'。我編輯了包含更多可能結果的答案 – GarethD 2013-04-25 10:49:22

+0

傑出的Gareth非常感謝你。 – wafw1971 2013-04-25 10:51:21