Sql server 在子查询中使用主查询结果的SQL存储过程

Sql server 在子查询中使用主查询结果的SQL存储过程,sql-server,crystal-reports,Sql Server,Crystal Reports,我已经为我的Crystal Reports创建了一个存储过程。它还不起作用,我还不知道如何解决这个问题。。这是我的疑问: use [fmsAir]; WITH Main AS ( SELECT [File].[FileNumber], [CostRevenue].[COSTAMOUNT], [CostRevenue].[RevenueAmount], [File].[FileDate], [CostRevenue].[REVENUERATE], [CostRevenue].[CostR

我已经为我的Crystal Reports创建了一个存储过程。它还不起作用,我还不知道如何解决这个问题。。这是我的疑问:

use [fmsAir];
WITH Main AS (
    SELECT  [File].[FileNumber], [CostRevenue].[COSTAMOUNT], [CostRevenue].[RevenueAmount], [File].[FileDate], [CostRevenue].[REVENUERATE], [CostRevenue].[CostRate], [CostRevenue].[REVENUECURRENCY],
            [File].[COMPANY], [CostRevenue].[CRNUMBER], [CostRevenue].[IINVOICENUMBER], [File].[RELATIONCODE], [CostRevenue].[COSTRELATIONCODE], [CostRevenue].[REVENUEDESCRIPTION]
    FROM    
            [fmsAir].[dbo].[File]
    INNER JOIN
            [fmsAir].[dbo].[CostRevenue] ON [File].[FILENUMBER] = [CostRevenue].FILENUMBER
    WHERE
            [File].[FILEDATE] BETWEEN '2016-08-01 00:00:00' AND '2018-01-20 00:00:00' AND
            [File].[FILENUMBER] > 500
),
Relation AS (
    SELECT [Relation].[Companyname], [Relation].[RELATIONCODE]
    FROM [fms].[dbo].[Relation]
    WHERE [Relation].[Relationcode] = Main.[File].[RELATIONCODE]
),
OutgoingInvoiceLine AS (
    SELECT [OutgoingInvoiceLine].[AMOUNT], [OutgoingInvoiceLine].[RATE], [OutgoingInvoiceLine].[Currency], [OutgoingInvoiceLine].[CRNUMBER]
    FROM [fmsAir].[dbo].[OutgoingInvoiceLine]
    WHERE [OutgoingInvoiceLine].[CRNUMBER] = Main.[CostRevenue].[CRNUMBER]
),
IncomingInvoiceLine AS (
    SELECT [IncomingInvoiceLine].[AMOUNT], [IncomingInvoiceLine].[RATE], [IncomingInvoiceLine].[CURRENCY], [IncomingInvoiceLine].[CRNUMBER]
    FROM [fmsAir].[dbo].[IncomingInvoiceLine]
    WHERE [IncomingInvoiceLine].[CRNUMBER] = Main.[CostRevenue].[CRNUMBER]
),
RelationCost AS (
    SELECT [Relation].[CompanyNAME], [Relation].[RelationCode]
    FROM [fms].[dbo].[Relation]
    WHERE Relation.RELATIONCODE = Main.[CostRevenue].[COSTRELATIONCODE]
)
SELECT main.FILENUMBER, main.COSTAMOUNT from Main 
现在是我使用where的部分,然后是Main。。它不起作用,因为这不是你可以使用它的方式,但我也不知道如何正确使用它。有人能帮我做这件事吗

以下是错误:

Msg 4104,第16级,状态1,第16行 无法绑定多部分标识符“Main.File.RELATIONCODE”。 Msg 4104,16级,状态1,第21行-多部分标识符 无法绑定“Main.CostRevenue.CRNUMBER”。味精4104,16级, 状态1,第26行多部分标识符“Main.CostRevenue.CRNUMBER” 无法约束。Msg 4104,16级,状态1,第31行 无法找到多部分标识符“Main.CostRevenue.COSTRELATIONCODE” 束缚


提前谢谢你

尝试在cte表达式中创建列名,并在下面提到的cte中使用该列名。
我希望这将有助于

如果只从第一个cte表中获取结果,为什么要使用4 cte。

错误是什么?这与MySQL有什么关系?使用cte,您不需要引用源表。Main.[CostRevenue]。[CRNUMBER]应该是的Main.[CRNUMBER]example@vice这也不起作用…:这是一样的。它无法绑定…这不起作用。。。我所有的列名都是这样的:Main([FileNumber]、[COSTAMOUNT]、[RevenueAmount]、[FileDate]、[REVENUERATE]、[CostRate]、[REVENUECURRENCY]、[COMPANY]、[CRNUMBER]、[IINVOICENUMBER]、[RELATIONCODE]、[COSTRELATIONCODE]、[REVENUEDESCRIPTION])作为(最后,我想从所有的cte中提取。当我们有一些重复的列名时,通常会发生此错误,因为上面cte的列名和派生cte的列名完全匹配。