无法绑定多部分标识符SQL Server错误

无法绑定多部分标识符SQL Server错误,sql,sql-server,variables,Sql,Sql Server,Variables,我搜索了SO和Google一段时间,但似乎找不到任何与代码集合部分发生的错误相关的信息,如果它确实发生在该部分,那么解决方案对我没有帮助 我试图使用用户输入的重量,并减去它的总重量。这等于心理医生 SET @Shrink = @InputWeight - [ICPL].[OriginalQuantity_Stk]; 我也用这种方法试过了,但也犯了同样的错误 SET @Shrink = @InputWeight - Sum([ICPL].[OriginalQuantity_Stk]);

我搜索了SO和Google一段时间,但似乎找不到任何与代码集合部分发生的错误相关的信息,如果它确实发生在该部分,那么解决方案对我没有帮助

我试图使用用户输入的重量,并减去它的总重量。这等于心理医生

SET @Shrink  = @InputWeight -  [ICPL].[OriginalQuantity_Stk];
我也用这种方法试过了,但也犯了同样的错误

SET @Shrink  = @InputWeight - Sum([ICPL].[OriginalQuantity_Stk]);
该表名为
IC\u ProductLots
,别名为
ICPL

我得到的错误是:

无法找到多部分标识符“ICPL.OriginalQuantity_Stk” 束缚

以下是我的加入,如果这有帮助的话:

FROM 
    (((( IC_Products [PC] 
INNER JOIN  
    DC_Transactions [DCT] ON [PC].ProductKey = [DCT].ProductKey)
INNER JOIN  
    AR_Customers ON [DCT].CustomerKey = AR_Customers.CustomerKey)
INNER JOIN  
    IC_ProductLots [ICPL] ON [DCT].LotKey = [ICPL].LotKey)
LEFT OUTER JOIN  
    IC_ProductCosts [ICP] ON ICP.ProductKey = PC.ProductKey 
                          AND ICP.ProductCostCode = 5)
如果看到更多代码会有所帮助,请告诉我

SET NOCOUNT ON; 
DECLARE @PurchaseCost Decimal(19,8);
DECLARE @InputWeight Decimal(19,8);
DECLARE @Shrink Decimal(19,8);

SET @PurchaseCost = 1;
SET @InputWeight = 20;
SET @Shrink  = @InputWeight;

SELECT DISTINCT 
     CAST([AR_Customers].[CustomerCode] AS NVARCHAR(40)) + ' - ' + CAST([AR_Customers].[Name] AS NVARCHAR(40)) AS [Supplier]
   , [PC].ProductCode
   , [PC].Description1
   , Count([ICPL].OriginalQuantity_Alt) AS [Boxes]
   , [ICPL].UnitOfMeasure_Alt
   , Sum([ICPL].OriginalQuantity_Stk) AS [Weight]
   , [ICPL].UnitOfMeasure_Stk
   , [ICP].UnitCost AS [Unit Cost]
   , Sum(ROUND([DCT].[Quantity_Stk] *[ICP].[UnitCost], 2)) AS [Total Sales]
   , Avg(([ICPL].[OriginalQuantity_Stk] / [ICPL].[OriginalQuantity_Alt])) AS [Avg. Box Weight]
   , @Shrink AS [Shrink]
 FROM (((( IC_Products [PC] 
    INNER JOIN  DC_Transactions [DCT] 
     ON [PC].ProductKey = [DCT].ProductKey)
    INNER JOIN  AR_Customers 
     ON [DCT].CustomerKey = AR_Customers.CustomerKey)
    INNER JOIN  IC_ProductLots [ICPL] 
     ON [DCT].LotKey = [ICPL].LotKey)
    LEFT OUTER JOIN  IC_ProductCosts [ICP] 
     ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5)
 WHERE 
    ([ICPL].ProductionDate >= { ts '2015-06-24 00:00:00' }   AND ([ICPL].ProductionDate <= { ts '2015-06-24 00:00:00' } OR [ICPL].ProductionDate Is Null)) 
AND ((1=1)  AND AR_Customers.CustomerKey IN (124) ) 
 GROUP BY 
     CAST([AR_Customers].[CustomerCode] AS NVARCHAR(40)) + ' - ' + CAST([AR_Customers].[Name] AS NVARCHAR(40))
   , [PC].ProductCode
   , [PC].Description1
   , [ICPL].UnitOfMeasure_Alt
   , [ICPL].UnitOfMeasure_Stk
   , [ICP].UnitCost
   , [ICPL].ProductionDate
   , AR_Customers.CustomerKey
 ORDER BY 
     CAST([AR_Customers].[CustomerCode] AS NVARCHAR(40)) + ' - ' + CAST([AR_Customers].[Name] AS NVARCHAR(40))
设置不计数;
声明@PurchaseCost小数(19,8);
声明@InputWeight十进制(19,8);
声明收缩小数(19,8);
设置@PurchaseCost=1;
设置@InputWeight=20;
设置@Shrink=@InputWeight;
选择不同的
将([AR_客户].[CustomerCode]转换为NVARCHAR(40))+'-'+将([AR_客户].[Name]转换为NVARCHAR(40))转换为[供应商]
,[PC]。产品代码
,[PC]。说明1
,将([ICPL].OriginalQuantity\u Alt)计数为[box]
,[ICPL]。测量单位
,总和([ICPL]。原始数量)为[重量]
,[ICPL]。计量单位
,[ICP]。单位成本为[单位成本]
,总和(四舍五入([DCT].[Quantity_Stk].[ICP].[UnitCost],2])为[总销售额]
,平均(([ICPL].[OriginalQuantity][u Stk]/[ICPL].[OriginalQuantity][u Alt])作为[Avg.Box Weight]
,@收缩为[收缩]
来自(((IC_产品[PC]
内部联接DC_事务[DCT]
在[PC]上。ProductKey=[DCT]。ProductKey)
内部连接AR_客户
在[DCT]上。CustomerKey=AR\u Customers.CustomerKey)
内部连接IC_产品批次[ICPL]
在[DCT].LotKey=[ICPL].LotKey上)
左外连接IC_产品成本[ICP]
关于ICP.ProductKey=PC.ProductKey和ICP.ProductCostCode=5)
哪里

([ICPL].ProductionDate>={ts'2015-06-24 00:00:00}和([ICPL].ProductionDate引用
SET
语句中的字段将不起作用-您需要在某个时间点实际
选择
数据。在看不到更多代码的情况下,我无法提供任何保证,但我相信您正在尝试执行以下操作:

SET @Shrink  = @InputWeight - 
  (
    SELECT Sum([ICPL].[OriginalQuantity_Stk])
    FROM IC_Products [PC] 
        INNER JOIN  DC_Transactions [DCT] 
         ON [PC].ProductKey = [DCT].ProductKey
        INNER JOIN  AR_Customers 
         ON [DCT].CustomerKey = AR_Customers.CustomerKey
        INNER JOIN  IC_ProductLots [ICPL] 
         ON [DCT].LotKey = [ICPL].LotKey
        LEFT OUTER JOIN  IC_ProductCosts [ICP] 
         ON ICP.ProductKey=PC.ProductKey and ICP.ProductCostCode=5
    WHERE ... -- add in your WHERE clause here
  )

是的,我认为更多的代码会有所帮助!您在提供问题的支持信息方面做得很好,这已经让您走在了前面,但我确实认为这将受益于包含更多的代码。单击原始问题下的“编辑”一词,并将其添加到中!删除parenthisis,这是用于de的裂开tables@AHiggins我为这份报告添加了我的其余代码。如果有帮助,请告诉我。谢谢,@Austin!现在,你到底想在这里做什么?所有行的
@Shrink
值应该是相同的,还是取决于
[OriginalQuantity]
?也许有几个示例输出行是有序的,这里…@AHiggins Shrink被假定为相同的值,因为它是inputwweight-sum[OriginalQuantity\u Stk]因此,整个报告的值应该是相同的。收缩基于报告的总重量,而不是每个项目的重量。让我知道这是否合理。当我尝试这样做时,我的公司使用的系统会出现一个错误,上面写着“多步操作生成错误。检查每个状态值。”我去掉了括号-再试一次。编辑1的想法是正确的,只是它拉出来的数字太离谱了。它每次显示的数字约为500万。感谢您提供的信息…我将以编辑3的形式加入一个新的提案,只有在您拥有最新版本的SQL Server时才有效。编辑1可能是关闭的,因为我没有包括您的
WHERE
子句和其他内容…添加任何您需要的内容以使它们相同。好的,这就是我所想的。除非where子句是动态的,例如每个报告的日期将更改以及客户密钥,我将如何实现?