我正在尝试运行此查询以按月份和按帐户获取销售额:
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` 是一个 `int` 日期采用yyyymmdd格式。
我收到了这个信息:
消息207,16级,状态1,第3行
列名“themonth”无效
为什么列名无效?
我假设错误消息没有意义,那么这个查询还有什么问题?
3条答案
按热度按时间ivqmmu1c1#
sql server不允许在中重用别名
GROUP BY
子句(其他数据库,如mysql,也允许这样做)。所以,这里的一个选择就是重复SELECT
条款:请注意,可以
ORDER BY
别名,因此可以保留查询的这部分。pvabu6sv2#
除了@timbiegeleisen之外,还有一种方法是使用子查询并实现结果
azpvetkf3#
不能在中重用别名
SELECT
在大多数查询中。但是,可以在中定义别名FROM
子句使用APPLY
. 所以:我不知道你的约会钥匙长什么样。但是,如果它是整数,您只需执行以下操作:
严格来说
floor()
不是必需的,但它清楚地表明您需要整数。