使用以下 SQL 表达式,但出现错误。
select
CampaignCustomer.CampaignCustomerID,
convert(varchar, CampaignCustomer.ModifiedDate, 111) as startdate,
CampaignCustomer.CampaignID,
CampaignCustomer.CampaignCallStatusID,
CampaignCustomer.UserID,
CampaignCustomerSale.Value,
Users.Name
from CampaignCustomer
inner join CampaignCustomerSale
on CampaignCustomer.CampaignCustomerID = CampaignCustomerSale.CampaignCustomerID
inner join Users
on CampaignCustomer.UserID = Users.UserID
where
CampaignCustomer.CampaignCallStatusID = 21
and CampaignCustomer.startdate = '2011/11/22' <------- THIS
order by
startdate desc,
Users.Name asc
错误:
Msg 207, Level 16, State 1, Line 1
Invalid column name 'startdate'.
我无法识别 WHERE 子句中的别名 startdate
,但可以识别 ORDER BY
子句中的别名。怎么了?
编辑:
不,我不可能将数据类型更改为 date
而不是 datetime
。其他地方需要时间。但在这种情况下,我只需要获取特定日期的所有帖子,我真的不关心 modifieddate
是日期的什么时间:)
也许需要另一种方法来代替convert()?
最佳答案
不能在 WHERE
子句中使用列别名。
将其更改为:
where
CampaignCustomer.CampaignCallStatusID = 21
and convert(varchar, CampaignCustomer.ModifiedDate, 111) = '2011/11/22'
关于SQL 别名给出无效的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243283/