Sql 为什么我会得到;无效的列名";列存在时出错
这是我的代码:Sql 为什么我会得到;无效的列名";列存在时出错,sql,sql-server,join,Sql,Sql Server,Join,这是我的代码: declare @maxsnap table (sita varchar(10), date date, SNAPSHOT_DATE date) insert into @maxsnap select sita, date, max(SNAPSHOT_DATE) snapshot from [UKRMC].[dbo].[Roll_forecast] where date between '2018-03-2
declare @maxsnap table (sita varchar(10), date date, SNAPSHOT_DATE date)
insert into @maxsnap
select
sita, date, max(SNAPSHOT_DATE) snapshot
from
[UKRMC].[dbo].[Roll_forecast]
where
date between '2018-03-21' and '2018-05-31'
group by
sita, date
select
roll.DATE, roll.SITA,
contacts.rooms,
roll.SEGMENT, roll.RNS
from
[UKRMC].[dbo].[Roll_forecast] roll
join
[UKRMC].[dbo].[Contacts] contacts on contacts.SITA = roll.SITA
join
@maxsnap snap on roll.DATE = snap.date
and roll.SITA = snap.sita
and roll.SNAPSHOT_DATE = snap.snapshot
where
roll.date between '2018-03-21' and '2018-05-31'
我得到的错误是
无效的列名“快照”
当我加入
@maxnsap
表变量时。但那个专栏确实存在 您有以下情况:
roll.DATE = snap.date
但是,该列称为snapshot\u date
:
roll.DATE = snap.snapshot_date
您有以下情况:
roll.DATE = snap.date
但是,该列称为snapshot\u date
:
roll.DATE = snap.snapshot_date
联接错误
and roll.SNAPSHOT_DATE = snap.SNAPSHOT_DATE
联接错误
and roll.SNAPSHOT_DATE = snap.SNAPSHOT_DATE
您的意思是
max(快照\u日期)作为快照
在您的中选择
?@Forty3我已经尝试过了,但它仍然给我相同的结果error@maxsnap没有列snapshot
,因此这不起作用roll.snapshot\u DATE=snap.snapshot
抱歉-您使用名为snapshot\u DATE
的列定义表@maxsnap
快照
。因此,在最后的选择中,您需要参考snap.SNAPSHOT\u DATE
yep@Forty3,您的意思是max(SNAPSHOT\u DATE),它比medid解释得更好作为快照
在您的中选择
?@Forty3我已经尝试过了,但它仍然给我相同的结果error@maxsnap没有列snapshot
,因此这不起作用roll.snapshot\u DATE=snap.snapshot
抱歉-您使用名为snapshot\u DATE
的列定义表@maxsnap
快照
。因此,在您的最后一次选择中
您需要参考snap.SNAPSHOT\u DATE
yep@Forty3对它的解释比我想象的要好,这很有效!但是,我将其称为“快照”,因此我不明白为什么需要引用原始列名@maxsnap表中的列称为snapshot\u DATE。在填充表的查询中,您使用了别名快照,但这不会更改表中列的名称table@Sorath对于尚未分配别名的编译器,您不能使用别名,如果您看到它解释了select语句的每个部分都是按优先顺序运行的,说明from是在SELECT之前完成的,该别名仅存在于初始的插入中,甚至在那里它也被忽略。由于您没有指定列列表,它只是假设列的顺序与您创建表的顺序相同。谢谢,这很有效!但是,我将其称为“快照”,因此我不明白为什么需要引用原始列名@maxsnap表中的列称为snapshot\u DATE。在填充表的查询中,您使用了别名快照,但这不会更改表中列的名称table@Sorath对于尚未分配别名的编译器,您不能使用别名,如果您看到它解释了select语句的每个部分都是按优先顺序运行的,说明from是在SELECT之前完成的,该别名仅存在于初始的插入中,甚至在那里它也被忽略。因为您没有指定列列表,所以它只是假设列的顺序与您创建表的顺序相同。