我正在做一個我試圖在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