原始代码块位于底部,但我已根据建议修改了INNER JOINS,但代码仍提供相同的结果。我有完全简化下面的查询...我可以稍后放回where子句和其他项目。
更多信息:在统计表中有许多列,但五个重要的列是GameKey,Team,Penalty1,Penalty2,Penalty3。
下面的样本STATS表:
GameKey | Team | Penalty1 | Penalty2 | Penalty3
----------------------------------------
1000 | Team A5 | 15 | 16 | 24
1001 | Team A5 | 23 | 24 | 24
下面的示例PENALTYTYPES表(只需几行即可获得想法):
1 |身体检查
2 |战斗
24 |无
运行查询后,结果应为
" A5队" " 3"
因为我想要计算三列中不是24的任何内容。
以下查询输出
" A5队" " 2"
因为它只计算Penalty1列
在下面的查询中,它确实运行Penalty1列并提供正确的计数总数。查询未执行的操作是代码的这一部分" OR Stats.Penalty2<> 24 OR Stats.Penalty3<> 24&#34 ;.查询的其余部分工作正常。
SELECT COUNT(PT0.Type),
COUNT(PT1.Type),
COUNT(PT2.Type),
COUNT((PT0.Type) + (PT1.Type) + (PT2.Type)) AS PT,
Stats.Team,
PT0.Type,
Stats.GameKey,
Games.GameKey
FROM Stats
INNER JOIN PenaltyTypes AS PT0 ON PT0.Type = Stats.Penalty1
INNER JOIN PenaltyTypes AS PT1 ON PT1.Type = Stats.Penalty2
INNER JOIN PenaltyTypes AS PT2 ON PT2.Type = Stats.Penalty3
INNER JOIN Games ON Games.GameKey = Stats.GameKey
WHERE (Stats.Penalty1 <> 24 OR Stats.Penalty2 <> 24 OR Stats.Penalty3 <> 24)
GROUP BY Stats.Team
ORDER BY Stats.Team
这是原始邮件,DISREGARD并使用上面的代码和问题的详细说明。
在以下声明中,只有3或3的第一个命令正在工作,其他两个似乎被忽略。 (Stats.Penalty1 = 22)有效,其他两个则不然。欢迎任何帮助。
SELECT COUNT(PenaltyTypes.Type),
COUNT(PenaltyTypes1.Type),
COUNT(PenaltyTypes2.Type),
COUNT((PenaltyTypes.Type) + (PenaltyTypes1.Type) + (PenaltyTypes2.Type)) AS PT,
Stats.Team,
Stats.Season,
PenaltyTypes.Type,
Stats.GameKey,
Games.GameKey,
Games.GameType,
Teams.TeamDescription
FROM Stats,
PenaltyTypes,
PenaltyTypes PenaltyTypes1,
PenaltyTypes PenaltyTypes2,
Games,
Teams
WHERE stats.season = '" & pickedyear & "'
AND Stats.Penalty1 = PenaltyTypes.Type
AND Stats.Penalty2 = PenaltyTypes1.Type
AND Stats.Penalty3 = PenaltyTypes2.Type
AND Stats.GameKey = Games.GameKey
AND Stats.Team = Teams.TeamDescription
AND Games.GameType = 'Playoff'
AND (Stats.Penalty1 = 22
OR Stats.Penalty2 = 22
OR Stats.Penalty3 = 22)
GROUP BY Teams.TeamDescription
ORDER BY Stats.Team
答案 0 :(得分:1)
为了后人的缘故,我不会弄乱原始查询,这里它被翻译成显式JOIN和正确的GROUP BY设置:
SELECT COUNT(PT0.Type)
,COUNT(PT1.Type)
,COUNT(PT2.Type)
,COUNT((PT0.Type) + (PT1.Type) + (PT2.Type)) AS PT
,S.Team
,S.Season
,PT0.Type
,S.GameKey
,G.GameKey
,G.GameType
,T.TeamDescription
FROM Stats AS S
INNER JOIN PenaltyTypes AS PT0 ON PT0.Type = S.Penalty1
INNER JOIN PenaltyTypes AS PT1 ON PT1.Type = S.Penalty2
INNER JOIN PenaltyTypes AS PT2 ON PT2.Type = S.Penalty3
INNER JOIN Games AS G ON G.GameKey = S.GameKey
AND G.GameType = 'Playoff'
INNER JOIN Teams AS T ON T.TeamDescription = G.GameType
WHERE S.Season = '" & pickedyear & "'
AND (S.Penalty1 = 22 OR S.Penalty2 = 22 OR S.Penalty3 = 22)
GROUP BY Stats.Team
,S.Season
,PT0.Type
,S.GameKey
,G.GameKey
,T.TeamDescription
ORDER BY Stats.Team;