Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 复杂查询“无法绑定多部分标识符”出现问题_Sql_Sql Server_Join_Ssms - Fatal编程技术网

Sql 复杂查询“无法绑定多部分标识符”出现问题

Sql 复杂查询“无法绑定多部分标识符”出现问题,sql,sql-server,join,ssms,Sql,Sql Server,Join,Ssms,在SQL上创建此视图时遇到问题。作为一个查询,它运行良好,但当尝试将其保存为视图时,它会给我一个多部分标识符无法绑定的错误。我认为这与隐式连接有关 在下面的脚本case语句中插入带有额外选项卡的零件时会出现此问题。 有没有办法重写它以将其保存为视图 谢谢 WITH MNP AS (SELECT GoodsReceivedID AS ID, PORef, MIN(IncomingDate) AS Manip_Start_Date, SUM(CA

在SQL上创建此视图时遇到问题。作为一个查询,它运行良好,但当尝试将其保存为视图时,它会给我一个多部分标识符无法绑定的错误。我认为这与隐式连接有关

在下面的脚本case语句中插入带有额外选项卡的零件时会出现此问题。 有没有办法重写它以将其保存为视图

谢谢

WITH MNP AS 
(SELECT        
    GoodsReceivedID AS ID, 
    PORef, 
    MIN(IncomingDate) AS Manip_Start_Date,
    SUM(CASE WHEN ArticleType = 'TEX' THEN UNITS ELSE 0 END) AS TEX_Mnp, 
    SUM(CASE WHEN ArticleType = 'ACC' THEN UNITS ELSE 0 END) AS ACC_Mnp, 
    SUM(CASE WHEN ArticleType = 'SHOE' THEN UNITS ELSE 0 END) AS SHOE_Mnp, 
    SUM(CASE WHEN ArticleType = 'TARA' THEN UNITS ELSE 0 END) AS TARA_Mnp, 
    SUM(CASE WHEN ArticleType NOT IN ('TEX','ACC','SHOE','TARA') THEN UNITS ELSE 0 END) AS MIX_Mnp,
    SUM(UNITS) AS Total_Units
 FROM dbo.NT_ManipulationResult 
 GROUP BY PORef, GoodsReceivedID),
INV AS 
(SELECT 
    GoodsReceivedID, 
    SUM(CASE WHEN UNITOFSUPPLYID = 1 THEN IN_TOTAL_UNITS END) AS Invoice_Units,
    SUM (CASE WHEN UNITOFSUPPLYID = 2 THEN IN_TOTAL_UNITS END) AS Invoice_KG,
    SUM (InvoiceNet + InvoiceVAT) AS Invoice_TOT
 FROM [dbo].[NT_GoodsReceivedInvoice]
 GROUP BY GoodsReceivedID
)


SELECT
    GR.ID, 
    GR.VL_Ref,
    GR.DateReceived, 
    MNP.Manip_Start_Date,
    COALESCE(DATEDIFF (Day, DateReceived, MNP.Manip_Start_Date),'') AS DaysToManipulate,
    WR.Name AS Warehouse, 
    GR.ArticleOriginID AS Origin, 
    SP.Name AS Supplier, 
    GD.Name AS Grade,
    COALESCE(INV.Invoice_TOT,0) AS Invoice_TOT,
    COALESCE(INV.Invoice_Units,0) AS Invoice_Units,
    COALESCE(INV.Invoice_KG,0) AS Invoice_KG,
    COALESCE(MNP.Total_Units,0) AS ManipulatedUnits, 
    CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN COALESCE(MNP.Total_Units,0) - COALESCE(INV.Invoice_Units,0) ELSE 0 END AS Manip_Difference,
    COALESCE(MNP.TEX_Mnp,0) AS TEX_Mnp,
    COALESCE(MNP.ACC_Mnp,0) AS  ACC_Mnp,
    COALESCE(MNP.SHOE_Mnp,0) AS SHOE_Mnp,
    COALESCE(MNP.TARA_Mnp,0) AS TARA_Mnp,
    COALESCE(MNP.MIX_Mnp,0) AS MIX_Mnp,



        CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN (COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS TEX_Cost,
        CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN 0.35*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS ACC_Cost,
        CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN 1.2*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS SHOE_Cost,
        CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN 0.45*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS TARA_Cost,
        CASE WHEN COALESCE(MNP.Total_Units,0) <> 0 THEN 0.8*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS MIX_Cost



FROM dbo.NT_GoodsReceived AS GR 
LEFT OUTER JOIN MNP ON GR.ID = MNP.ID 
LEFT OUTER JOIN [dbo].[NT_Warehouse] WR ON GR.WarehouseID = WR.ID
LEFT OUTER JOIN [dbo].[NT_ArticleOrigin] AO ON GR.ArticleOriginID = AO.ID
LEFT OUTER JOIN [dbo].[NT_Supplier] SP ON GR.SupplierID = SP.ID
LEFT OUTER JOIN [dbo].[NT_ArticleGrade] GD ON GR.ArticleGradeID = GD.ID 
LEFT OUTER JOIN INV ON GR.ID = INV.GoodsReceivedID
WHERE GR.ID NOT IN (19,20)
我找到了一个解决方案:

我没有像在查询中添加语句那样添加MNP和INV,而是将它们创建为单独的视图,我在这个新查询中引用了这些视图,现在可以将它们另存为视图

脚本结束如下:

SELECT
    GR.ID, 
    GR.VL_Ref, 
    GR.DateReceived, 
    MNP.Manip_Start_Date, 
    COALESCE (DATEDIFF (Day, GR.DateReceived, MNP.Manip_Start_Date),'') AS DaysToManipulate, 
    WR.Name AS Warehouse, 
    GR.ArticleOriginID AS Origin, 
    SP.Name AS Supplier, 
    GD.Name AS Grade,   
    COALESCE(INV.Invoice_TOT,0) AS Invoice_TOT,
    COALESCE(INV.Invoice_Units,0) AS Invoice_Units,
    COALESCE(INV.Invoice_KG,0) AS Invoice_KG,
    COALESCE(MNP.Total_Units,0) AS ManipulatedUnits,    
    CASE WHEN MNP.Total_Units IS NOT NULL THEN MNP.Total_Units - INV.Invoice_Units ELSE 0 END AS Manip_Difference,
    COALESCE(MNP.TEX_Mnp,0) AS TEX_Mnp, 
    COALESCE(MNP.ACC_Mnp,0) AS  ACC_Mnp,
    COALESCE(MNP.SHOE_Mnp,0) AS SHOE_Mnp,
    COALESCE(MNP.TARA_Mnp,0) AS TARA_Mnp,
    COALESCE(MNP.MIX_Mnp,0) AS MIX_Mnp, 
    CASE WHEN MNP.Total_Units IS NOT NULL THEN (COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS TEX_Cost,
    CASE WHEN MNP.Total_Units IS NOT NULL THEN 0.35*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS ACC_Cost,
    CASE WHEN MNP.Total_Units IS NOT NULL THEN 1.2*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS SHOE_Cost,
    CASE WHEN MNP.Total_Units IS NOT NULL THEN 0.45*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS TARA_Cost,
    CASE WHEN MNP.Total_Units IS NOT NULL THEN 0.8*(COALESCE(INV.Invoice_TOT,0) / (COALESCE(MNP.TEX_Mnp,0) + 0.35*COALESCE(MNP.ACC_Mnp,0) + 1.2*COALESCE(MNP.SHOE_Mnp,0) + .45*COALESCE(MNP.TARA_Mnp,0) +.8*COALESCE(MNP.MIX_Mnp,0))) ELSE 0 END AS MIX_Cost
FROM dbo.NT_GoodsReceived AS GR 
LEFT OUTER JOIN MNP ON GR.ID = MNP.ID 
LEFT OUTER JOIN dbo.NT_Warehouse AS WR ON GR.WarehouseID = WR.ID 
LEFT OUTER JOIN dbo.NT_ArticleOrigin AS AO ON GR.ArticleOriginID = AO.ID 
LEFT OUTER JOIN dbo.NT_Supplier AS SP ON GR.SupplierID = SP.ID 
LEFT OUTER JOIN dbo.NT_ArticleGrade AS GD ON GR.ArticleGradeID = GD.ID 
LEFT OUTER JOIN INV  ON GR.ID = INV.GoodsReceivedID
WHERE (GR.ID NOT IN (19, 20))

错误应该引用此标识符,为什么我们不在您的错误中看到它呢?可能不是,但我注意到您在DayToManipulate列中缺少DateReceived列的表别名。抱歉,所述错误指的是MNP.Total_单位和INV.Invoice_单位