Sql server 无法在sql上绑定多部分标识符,其大小写为
大家好,我有一个sql查询,其中我使用case when和internal join 我面临的问题是我得到了多部分标识符的错误 这是我的sql查询Sql server 无法在sql上绑定多部分标识符,其大小写为,sql-server,inner-join,case-when,Sql Server,Inner Join,Case When,大家好,我有一个sql查询,其中我使用case when和internal join 我面临的问题是我得到了多部分标识符的错误 这是我的sql查询 SELECT CASE when row_num = 1 THEN bill_id ELSE NULL END as bill_id, listinvoice.sonvinid, listinvoice.date, listinvoice.brandname,listinvoice.venue,listinvoice.zone, listinvo
SELECT
CASE when row_num = 1 THEN bill_id ELSE NULL
END as bill_id, listinvoice.sonvinid,
listinvoice.date, listinvoice.brandname,listinvoice.venue,listinvoice.zone,
listinvoice.location,
listinvoice.instructore,listinvoice.paymentid,listinvoice.amount
FROM (
select bill_id, row_number()
over
(partition by bill_id order by listinvoice.date asc)
row_num, listinvoice.sonvinid, tid, listinvoice.date
, listinvoice.brandname,listinvoice.venue,
listinvoice.zone,listinvoice.location,
listinvoice.instructore,paymentid,amount
from listinvoice
inner join sonvininsert
on
sonvininsert.sonvinid=listinvoice.sonvinid
where
tid in (select tid from trainerdetails where empname='andrew charles')
and listinvoice.[date] between
'2015-02-02' and '2017-02-02'
)data
还有我的错误
Msg 4104,16级,状态1,第1行-多部分标识符
无法绑定“listinvoice.sonvinid”。味精4104,16级,状态
1,第1行无法找到多部分标识符“listinvoice.date”
跳跃Msg 4104,16级,状态1,第1行-多部分标识符
无法绑定“listinvoice.brandname”。味精4104,16级,状态
1,第1行无法找到多部分标识符“listinvoice.Vincement”
跳跃Msg 4104,16级,状态1,第1行-多部分标识符
无法绑定“listinvoice.zone”。味精4104,16级,状态1,
第1行无法找到多部分标识符“listinvoice.location”
跳跃Msg 4104,16级,状态1,第1行-多部分标识符
无法绑定“listinvoice.Instructor”。味精4104,16级,
状态1,第1行多部分标识符“listinvoice.paymentid”
无法约束。Msg 4104,16级,状态1,第1行,多部件
无法绑定标识符“listinvoice.amount”
对此可能的修复方法是什么?除了内部查询的别名外,您的查询是正确的,需要进行一次更改:
SELECT
CASE
when row_num = 1
THEN bill_id
ELSE NULL
END as bill_id,
listinvoice.sonvinid,
listinvoice.date,
listinvoice.brandname,
listinvoice.venue,
listinvoice.zone,
listinvoice.location,
listinvoice.instructore,
listinvoice.paymentid,
listinvoice.amount
FROM (
select
bill_id,
row_number() over
(partition by bill_id order by listinvoice.date asc) row_num,
listinvoice.sonvinid,
tid,
listinvoice.date ,
listinvoice.brandname,
listinvoice.venue,
listinvoice.zone,
listinvoice.location,
listinvoice.instructore,
paymentid,
amount
from listinvoice
inner join sonvininsert
on
sonvininsert.sonvinid=listinvoice.sonvinid
where
tid in
(
select
tid
from trainerdetails
where empname='andrew charles'
)
and listinvoice.[date]
between '2015-02-02' and '2017-02-02'
)listinvoice -- change required here to correct the alias
您的
SELECT
语句是从名为data
的派生表中提取的,因此您需要适当地引用表名 尝试将第一个SELECT
s更改为data。columnnames
来自listinvoice。columnnames
来自您发布的内容,此内容根本不需要子查询。此处的数据是什么?@SeanLange此内容与主题无关,但是您对查询和聚合有着非常深刻的理解,一般来说,您不会看到数据样本。。。真是太神奇了。你是怎么做到的?我是正确的。我没有看到您在外部查询中引用行号列的部分。但其他人已经回答了你的问题。
SELECT
CASE when row_num = 1 THEN bill_id ELSE NULL
END as bill_id, data.sonvinid,
data.date, data.brandname,data.venue,data.zone,
data.location,
data.instructore,data.paymentid,data.amount
FROM (
select bill_id, row_number()
over
(partition by bill_id order by listinvoice.date asc)
row_num, listinvoice.sonvinid, tid, listinvoice.date
, listinvoice.brandname,listinvoice.venue,
listinvoice.zone,listinvoice.location,
listinvoice.instructore,paymentid,amount
from listinvoice
inner join sonvininsert
on
sonvininsert.sonvinid=listinvoice.sonvinid
where
tid in (select tid from trainerdetails where empname='andrew charles')
and listinvoice.[date] between
'2015-02-02' and '2017-02-02'
)data -- here is where you named your table