SQL Server:三个表的连接

时间:2017-08-23 05:42:55

标签: sql sql-server

我们正在创建一个关于计费和库存维护的WPF应用程序项目。在数据库中,表tbl_puv包含购买详细信息产品ID,数量和比例ID,收据表tbl_receipt收据是为所需数量而设的。每次收到后,我应该更新产品剩余数量的tbl_puv

这是我使用的查询:

SELECT 
    Pending = (([Convertscale](tbl_puv.Quantity, tbl_puvd.ScaleId, p.StandardUnit)) - ([Convertscale](tbl_reciptdetails.Quantity, tbl_reciptdetails.Scale, p.StandardUnit))) 
FROM 
    dbo.tbl_Product p 
INNER JOIN 
    dbo.tbl_puvd ON p.ProductId = dbo.tbl_puv.ProductId 
INNER JOIN 
    dbo.tbl_reciptdetails ON tbl_reciptdetails.ProductId = tbl_puvd.ProductId 
tbl_puv.IsActive = 'True' AND tbl_receiptdetails.IsActive = 'True' AND tbl_puvd.PurchaseId = 10609 

其中Convertscale是标量值函数,用于在减法之前将乘积单位转换为标准单位

在上面的查询中,我的表是:

  • tbl_puv ---购买表
  • tbl_puvd ---购买明细表
  • tbl_receiptdetails ---收据明细表
  • tbl_product ---产品表

我得到多个结果请帮我查询....谢谢

表格的列结构如下:

tbl_PIVD = pivID | prodID | Qty |  ScaleID

tbl_GRN = gID | pivID 

tbl_GRND = grndID | gID | prodID | Qty | ScaleID 

tbl_prod = prodID | ScaleID(SIunit)

问题:获取数量(数量)及其差异 pending = ConvertScale(tbl_PIVD.Qty,tbl_PIVD.ScaleID,tbl_prodID.ScaleID) - ConvertScale(tbl_GRND.Qty,tbl_GRND.ScaleID,tbl_prodID.ScaleID) 来自tbl_PIVD和tbl_GRND表,其中tbl_PIVD.pivID = tbl_GRN.pivID和 tbl_PIVD.prodID = tbl_GRND.prodID。在使两个比例相等之后进行减法,使用函数ConvertScale

转换比例

1 个答案:

答案 0 :(得分:0)

我尝试编辑您的查询:

 declare @pending as numeric(18,2)
    SELECT 
      top 1 @pending = isnull((([Convertscale](tbl_puv.Quantity, tbl_puvd.ScaleId, 
     p.StandardUnit)),0.00) - isnull(([Convertscale](tbl_reciptdetails.Quantity, tbl_reciptdetails.Scale, p.StandardUnit))),0.00) 
FROM 
    dbo.tbl_Product p 
INNER JOIN 
    dbo.tbl_puvd ON p.ProductId = dbo.tbl_puv.ProductId 
INNER JOIN 
    dbo.tbl_reciptdetails ON tbl_reciptdetails.ProductId = tbl_puvd.ProductId 
where
tbl_puv.IsActive = 'True' AND tbl_receiptdetails.IsActive = 'True' AND tbl_puvd.PurchaseId = 10609 

select @pending