我正在做一个我试图在SQL Server中完成的任务,因为这是我将在新工作中使用的语言。我完成了我的查询是这样的:SQL查询我可以在MySQL上工作,但不能在SQL Server上工作
SELECT
h.hacker_id, h.name, sum(scr) AS tot
FROM
hackers AS h
JOIN
(SELECT
s2.hacker_id, s2.challenge_id, max(s2.score) AS scr
FROM
submissions s2
GROUP BY
s2.hacker_id, s2.challenge_id
HAVING
scr > 0) AS CET ON h.hacker_id = CET.hacker_id
GROUP BY
h.hacker_id
ORDER BY
tot DESC, h.hacker_id;
此查询的工作(如,这是一个正确的解决)在MySQL,但不能在SQL Server中。我想我会用,而不是在JOIN
语句SELECT
查询CTE,所以我调整了这个使用CTE,而不是像这样:
WITH CTE AS
(
SELECT
s2.hacker_id, s2.challenge_id, max(s2.score) AS scr
FROM
submissions s2
GROUP BY
s2.hacker_id, s2.challenge_id
HAVING
scr > 0
)
SELECT
h.hacker_id, h.name, sum(scr) as tot
FROM
hackers AS h
JOIN
CTE ON h.hacker_id = CTE.hacker_id
GROUP BY
h.hacker_id
ORDER BY
tot DESC, h.hacker_id;
但是这将引发一个错误:
Invalid column name 'scr'.
(它说在第6行,但从经验,我用来完成这些任务的网站可能有点错误线错误)。
是否有人可以告诉我错过了什么,以及SQL Server的工作示例?
(当然,对代码本身的普遍批评非常受欢迎,我希望能够在这方面做得更好)。
的可能的复制[选择SQL中的列不在群组中](http://stackoverflow.com/questions/11991079/select-a-column-in-sql-not-in-group-by) –
Just Vocab:CET(Common Expression Table?)或CTE(公用表表达式)? (我通常看CTE不是CET) – xQbert
@xQbert啊谢谢!得到缩写的顺序错误:) – Cenderze