I am trying to run this query to get the sales by month and by account:
select
left(cast(datekey as varchar(8)), 6) as themonth,
account, sum(sales)
from
Sales
where
datekey > 20150101
group by
themonth, account
order by
themonth asc
datekey is an int following the YYYYMMDD format for dates.
I’m getting this message:
Msg 207, Level 16, State 1, Line 3
Invalid column name ‘themonth’
Why would that column name be invalid?
I’m assuming the error message is meaningless so what else is wrong with this query?
Advertisement
Answer
SQL Server does not allow the alias to be reused in the GROUP BY clause (other databases, such as MySQL, do allow for this). So, one option here would be to just repeat the quantity in the SELECT clause:
SELECT
LEFT(CAST(datekey AS varchar(8)), 6) AS themonth,
account,
SUM(sales)
FROM Sales
WHERE datekey > 20150101
GROUP BY
LEFT(CAST(datekey AS varchar(8)), 6),
account
ORDER BY
themonth;
Note that it is possible to ORDER BY the alias, so you may leave this part of your query as-is.