Das Problem ist nicht irgendwas mit Leerzeichen o.ä., das Problem ist generell dass du versuchst IN der eigentlichen Abfrage Spalten-Aliase zu verwenden. Das geht nämlich nicht.
Du kannst aber ein sub-select verwenden:
BEGIN TRAN;
CREATE TABLE #test (
[a column] INT NOT NULL PRIMARY KEY,
[another column] INT NOT NULL,
[yet another column] INT NOT NULL
);
INSERT #test ([a column], [another column], [yet another column]) VALUES (1, 2, 3);
INSERT #test ([a column], [another column], [yet another column]) VALUES (2, 5, 5);
INSERT #test ([a column], [another column], [yet another column]) VALUES (3, 6, 6);
INSERT #test ([a column], [another column], [yet another column]) VALUES (4, 7, 7);
-- geht nicht:
/*
SELECT
[a column] as c1,
[another column] as c2,
[yet another column] AS c3
FROM
#test
WHERE
c1 > 1 -- <-- hier kannst du zwar tabellen-aliase verwenden, aber keine spalten-aliase!
AND c2 < 7 -- <-- ...
ORDER BY
c2 DESC -- <-- ebenso
;
*/
-- geht:
SELECT
*
FROM (
SELECT
[a column] as c1,
[another column] as c2,
[yet another column] AS c3
FROM
#test
) AS t
WHERE
c1 > 1
AND c2 < 7
ORDER BY
c2 DESC
;
DROP TABLE #test;
ROLLBACK TRAN;