0

Balance列显示当前库存 + 未结 PO 减去输入的数量。

我在语句中有一个带有 ALIASes 的现有查询SELECT

SELECT dbo.Items.ItemNo, 
       dbo.Items.Name, 
       dbo.Vendors.Name AS VendorName, 
       ISNULL(ItemsStock.StockOnHand, 0) AS [Stock on Hand], 
       ISNULL(PO.[Open PO's'], 0) AS [Open PO], 
       ISNULL(WO.OpenWOQTY, 0) AS [QTY Entered].

如何添加一个名为Balance汇总现有库存和未结采购订单的附加列,然后扣除输入的数量?

4

2 回答 2

0

三个建议:

  1. 使用表别名。
  2. 使用coalesce()而不是isnull(). coalesce()是 ANSI 标准。
  3. 使用不需要转义的列名。

这看起来像:

SELECT i.ItemNo, i.Name, v.Name AS VendorName, 
       COALESCE(is.StockOnHand, 0) AS Stock_on_Hand, 
       COALESCE(PO.[Open PO's'], 0) AS Open_PO, 
       COALESCE(WO.OpenWOQTY, 0) AS QTY_Entered,
       (COALESCE(is.StockOnHand, 0) + COALESCE(PO.[Open PO's'], 0) - COALESCE(WO.OpenWOQTY, 0) as Balance
FROM dbo.Items i JOIN
     dbo.Vendors v
     . . .

如果不想重复别名,传统的方法是使用 CTE 或子查询。SQL Server 还提供横向连接,通过apply关键字引入:

SELECT i.ItemNo, i.Name, v.Name AS VendorName, 
       vals.Stock_on_Hand, vals.Open_PO, vals.QTY_Entered,
       (vals.Stock_on_Hand + vals.Open_PO - vals.QTY_Entered) as Balance
FROM dbo.Items i JOIN
     dbo.Vendors v
     . . . CROSS APPLY
     (VALUES ( COALESCE(is.StockOnHand, 0), COALESCE(PO.[Open PO's'], COALESCE(WO.OpenWOQTY, 0))
     ) vals(Stock_on_Hand, Open_PO, QTY_Entered);
于 2018-03-14T02:45:38.883 回答
0
SELECT dbo.Items.ItemNo, 
       dbo.Items.Name, 
       dbo.Vendors.Name AS VendorName, 
       ISNULL(ItemsStock.StockOnHand, 0) AS [Stock on Hand], 
       ISNULL(PO.[Open PO's'], 0) AS [Open PO], 
       ISNULL(WO.OpenWOQTY, 0) AS [QTY Entered],
       ISNULL(ItemsStock.StockOnHand, 0) + ISNULL(PO.[Open PO's'], 0) - ISNULL(WO.OpenWOQTY, 0) AS [Balance]
FROM table
于 2018-03-14T02:33:56.507 回答