大家好我每个人都有一个SQL查询,其中我使用的是case和inner 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,
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
和我的错误
消息4104,级别16,状态1,行1多部分标识符 " listinvoice.sonvinid"无法受约束。 Msg 4104,Level 16,State 1,第1行多部分标识符" listinvoice.date"不可能 界。消息4104,级别16,状态1,行1多部分标识符 " listinvoice.brandname"无法受约束。 Msg 4104,Level 16,State 1,第1行多部分标识符" listinvoice.venue"不可能 界。消息4104,级别16,状态1,行1多部分标识符 " listinvoice.zone"无法受约束。 Msg 4104,Level 16,State 1, 第1行多部分标识符" listinvoice.location"不可能 界。消息4104,级别16,状态1,行1多部分标识符 " listinvoice.instructore"无法受约束。消息4104,级别16, 状态1,第1行多部分标识符" listinvoice.paymentid" 无法受约束。消息4104,级别16,状态1,行1多部分 标识符" listinvoice.amount"无法受约束。
对此可能的修复方法是什么?
答案 0 :(得分:1)
除了内部查询的别名外,您的查询是正确的,只需要进行一次更改:
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
答案 1 :(得分:0)
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
您的SELECT
语句是从名为data
的派生表中提取的,因此您需要适当地引用表名。