Sql 在本地数据库上从openquery更改为子查询时,最后一个括号中“)”附近的语法不正确

Sql 在本地数据库上从openquery更改为子查询时,最后一个括号中“)”附近的语法不正确,sql,syntax,Sql,Syntax,在本地数据库上从openquery更改为子查询时,为什么此查询在最后一个括号附近返回不正确的语法 您可以看到openquery之前启动并运行的注释行 select right(rtrim(a.vouchernumber),9) as voucherkey , a.vouchernumber , vendorkey , rtrim(invoicenumber) as invoicenumber , invoicedate , duedate , documenttype , PostDate ,

在本地数据库上从openquery更改为子查询时,为什么此查询在最后一个括号附近返回不正确的语法

您可以看到openquery之前启动并运行的注释行

select right(rtrim(a.vouchernumber),9) as voucherkey
, a.vouchernumber
, vendorkey
, rtrim(invoicenumber) as invoicenumber
, invoicedate
, duedate
, documenttype
, PostDate
, qty
, amt = 
    CASE 
        WHEN documenttype = 'D' THEN -(amt)
        WHEN b.transactiontype = 'V' THEN -(amt)
    ELSE 
        amt 
    End
, extendedlineamt
, intercompanyid
, acct
, NaturalAcct
, c.segmentdescription as NaturalAcctDesc
, Dept
, f.segmentdescription as DeptDesc
, Site
, d.segmentdescription as SiteDesc
, Project
, e.segmentdescription as ProjDesc
, b.*
, rtrim(vendorname) as vendorname
, rtrim(vendoraddress1) as vendoraddress1
, vendoraddress2
, vendoraddress3
, vendorcity
, rtrim(vendorstate) as vendorstate
, rtrim(vendorzipcode) as vendorzipcode
, rtrim(vendoraddress1) + ' ' + rtrim(vendoraddress2) +' ' + rtrim(vendorcity) + ', ' + rtrim(vendorstate) as VendorAddress
, Dept + '.' + Site + '.' + Project as ProjectId 
--from openquery (LinkedServer,
--  'select a.vouchernumber
from  (
    select a.vouchernumber
    , a.vendorkey
    , a.invoicenumber
    , a.invoicedate
    , a.duedate
    , a.documenttype
    , a.recdate as PostDate
    , b.qty
    , b.amt
    , b.extendedlineamt
    , b.intercompanyid
    , b.acct
    , Substring(Acct, 1, 4) as NaturalAcct
    , Substring(Acct,8, 3 ) as Site
    , Substring(Acct,11, 4 ) as Project
    , Substring(Acct,5,3) as Dept
    , v.vendorname
    , v.vendoraddress1
    , v.vendoraddress2
    , v.vendoraddress3
    , v.vendorcity
    , v.vendorstate
    , v.vendorzipcode 
from aphdr a 
join aplin b 
    on a.vouchernumber = b.vouchernumber
left join apvend v 
    on a.vendorkey = v.vendorkey
where a.recdate between '2011-01-01' and '2012-10-02' 
    and cast(Substring(Acct,11, 4 ) as varchar(4)) like 'VIR'
    and left(a.vouchernumber,1) <> 'G'
    and Company = 'ASSFD'
)

您需要为子查询提供别名或名称

在这里,我刚刚在末尾添加了tbl1

select right(rtrim(a.vouchernumber),9) as voucherkey
, a.vouchernumber
, vendorkey
, rtrim(invoicenumber) as invoicenumber
, invoicedate
, duedate
, documenttype
, PostDate
, qty
, amt = 
    CASE 
        WHEN documenttype = 'D' THEN -(amt)
        WHEN b.transactiontype = 'V' THEN -(amt)
    ELSE 
        amt 
    End
, extendedlineamt
, intercompanyid
, acct
, NaturalAcct
, c.segmentdescription as NaturalAcctDesc
, Dept
, f.segmentdescription as DeptDesc
, Site
, d.segmentdescription as SiteDesc
, Project
, e.segmentdescription as ProjDesc
, b.*
, rtrim(vendorname) as vendorname
, rtrim(vendoraddress1) as vendoraddress1
, vendoraddress2
, vendoraddress3
, vendorcity
, rtrim(vendorstate) as vendorstate
, rtrim(vendorzipcode) as vendorzipcode
, rtrim(vendoraddress1) + ' ' + rtrim(vendoraddress2) +' ' + rtrim(vendorcity) + ', ' + rtrim(vendorstate) as VendorAddress
, Dept + '.' + Site + '.' + Project as ProjectId 
--from openquery (LinkedServer,
--  'select a.vouchernumber
from  (
    select a.vouchernumber
    , a.vendorkey
    , a.invoicenumber
    , a.invoicedate
    , a.duedate
    , a.documenttype
    , a.recdate as PostDate
    , b.qty
    , b.amt
    , b.extendedlineamt
    , b.intercompanyid
    , b.acct
    , Substring(Acct, 1, 4) as NaturalAcct
    , Substring(Acct,8, 3 ) as Site
    , Substring(Acct,11, 4 ) as Project
    , Substring(Acct,5,3) as Dept
    , v.vendorname
    , v.vendoraddress1
    , v.vendoraddress2
    , v.vendoraddress3
    , v.vendorcity
    , v.vendorstate
    , v.vendorzipcode 
from aphdr a 
join aplin b 
    on a.vouchernumber = b.vouchernumber
left join apvend v 
    on a.vendorkey = v.vendorkey
where a.recdate between '2011-01-01' and '2012-10-02' 
    and cast(Substring(Acct,11, 4 ) as varchar(4)) like 'VIR'
    and left(a.vouchernumber,1) <> 'G'
    and Company = 'ASSFD'
) tbl1

您需要为子查询设置别名

在查询末尾添加别名