我必须重新创建这个excel表:
使用此表:
以下就是我现在所拥有的,但这显然让我看了4次。
SELECT WEDSTRIJDFORMULIER.*, INDELING.Klas,
CONCAT(SUM(UITSLAG.PuntenA), ' - ', SUM(UITSLAG.PuntenB)) AS Uitslag,
CONCAT(UITSLAG.ScoreA, ' - ', UITSLAG.ScoreB) AS 'Set 1',
CONCAT(UITSLAG.ScoreA, ' - ', UITSLAG.ScoreB) AS 'Set 2',
CONCAT(UITSLAG.ScoreA, ' - ', UITSLAG.ScoreB) AS 'Set 3',
CONCAT(UITSLAG.ScoreA, ' - ', UITSLAG.ScoreB) AS 'Set 4'
FROM WEDSTRIJDFORMULIER, INDELING, UITSLAG
WHERE INDELING.Team = WEDSTRIJDFORMULIER.TeamA
AND UITSLAG.WID = WEDSTRIJDFORMULIER.WID
GROUP BY UITSLAG.WID
如何使用子查询获得第1,2,3和4组的分数?我不允许使用加入。
答案 0 :(得分:0)
除了关于JOINs vs WHERE子句ANSI查询的评论之外,我认为你所缺少的更重要的事实是“Uitslag”和“Sets”1-4不是5列,而是10 ...每个都有两个列分别为scoreA和scoreB
Uitslag有Excel列E + F,第1组有G + H,第2组有I + J等。事实上,有人用标题跨越两列的“标题”来掩盖答案。< / p>
SELECT
WEDSTRIJDFORMULIER.*,
INDELING.Klas,
SUM(UITSLAG.PuntenA) as UitslagA,
SUM(UITSLAG.PuntenB) as UitslagB,
SUM( case when UITSLAG.Set = 1 then UITSLAG.ScoreA else 0 end ) as Set1A,
SUM( case when UITSLAG.Set = 1 then UITSLAG.ScoreB else 0 end ) as Set1B,
SUM( case when UITSLAG.Set = 2 then UITSLAG.ScoreA else 0 end ) as Set2A,
SUM( case when UITSLAG.Set = 2 then UITSLAG.ScoreB else 0 end ) as Set2B,
SUM( case when UITSLAG.Set = 3 then UITSLAG.ScoreA else 0 end ) as Set3A,
SUM( case when UITSLAG.Set = 3 then UITSLAG.ScoreB else 0 end ) as Set3B,
SUM( case when UITSLAG.Set = 4 then UITSLAG.ScoreA else 0 end ) as Set4A,
SUM( case when UITSLAG.Set = 4 then UITSLAG.ScoreB else 0 end ) as Set4B
FROM
WEDSTRIJDFORMULIER,
INDELING,
UITSLAG
WHERE
INDELING.Team = WEDSTRIJDFORMULIER.TeamA
AND UITSLAG.WID = WEDSTRIJDFORMULIER.WID
GROUP BY
UITSLAG.WID
注意情况/何时在SUM()中,只有当它是相应的1-4的相应“SET”时才专门查找每个。如果没有适当的总和列结果,只需使用0,否则,得到分数。
答案 1 :(得分:0)
第1步 - 开始别名表。例如,UITSLAG A意味着您现在可以说A.Klas而不是UITSLAG.Klas。
第2步 - 正如@Dan Andrews和@KM指出的那样,你已经在使用连接了。拿出来。
第3步 - 编写子查询。我不会为你做一个,因为这是家庭作业。但是,让我引导你完成它。
要启动子查询,请打开括号,然后键入完整的select语句并关闭括号。 select语句中的子查询只能返回一个值...只有一个!
要使用没有连接的子查询,它需要是一个相关的子查询。所以,在我的主查询中,我引用了表A,其键是A.Key。
因此,要从表B中恢复与表A中的主键相关的外键,我需要在select语句中编写以下子查询:
Select A.varA
, A.varB --your subquery will start next
, (Select B.Key
From TableB as B
Where A.Key = B.Key) --Notice I referenced TableA without mentioning it in my subquery. This is what makes it a correlated subquery.
From TableA as A;
通过这种方式,您可以在子查询中引用主查询中的表,从而使Joins成为不必要的!
现在,正如@Eggyal指出的那样,使用相关子查询几乎总是比使用连接慢。但是,有时你只能通过相关的子查询得到你想要的东西,所以要好好学习!!!