存储过程以显示项目总数中未处理的项目

时间:2016-08-25 17:08:33

标签: sql sql-server-2008 stored-procedures

我是数据库的新手,并尝试使用存储过程的一些东西。我在我的存储过程中使用3tbales - Customer,OrderDetails和Order。我正在根据orderdetails表的数量字段显示所有未处理的订单。无论何时,处理特定订单,在我的OrderDetail表中都有fillInfo字段,其中从Order表中插入多个purchaseOrder编号。数据正在显示但是很快因为即使处理了1个数量,那么与该特定订单相关的数据也会消失。假设,如果客户按1个订单订购10个数量,如果我处理其中2个,则该订单仍应显示在未处理的订单列表中,因为8个数量是仍然有待交付给客户。

我的orderdetail表看起来像

SELECT TOP 1000 [lineID]
      ,[orderID]
      ,[itemNumber]
      ,[itemDesc]
      ,[qty]
      ,[price]
      ,[priceType]
      ,[contract]
      ,[supplierPartID]
      ,[uom]
      ,[classDomain]
      ,[classValue]
      ,[comments]
      ,[shipping]
      ,[tax]
      ,[reqDeliveryDate]
      ,[fillInfo]
      ,[invoiceID]
      ,[Version]
      ,[productid]
      ,[eta]
      ,[lineOrderID]
  FROM [bfdb].[dbo].[OrderDetails]

这里的orderid来自订单表,其中订单表看起来像

SELECT TOP 1000 [orderID]
      ,[customerID]
      ,[billAddressID]
      ,[shipAddressID]
      ,[orderDate]
      ,[employeeID]
      ,[salesTax]
      ,[poNumber]
      ,[dueDate]
      ,[terms]
      ,[shipMethod]
      ,[shippingFee]
      ,[shippingNotes]
      ,[oStatus]
      ,[createDate]
      ,[source]
      ,[comments]
      ,[cardType]
      ,[cardNumber]
      ,[expMonth]
      ,[expYear]
      ,[nameOnCard]
      ,[cvvCode]
      ,[cancelDate]
      ,[total]
      ,[url]
      ,[role]
      ,[consolidationPoint]
      ,[cxmlData]
      ,[authStatus]
      ,[authCode]
      ,[transactionID]
      ,[authDateTime]
      ,[avsResponse]
      ,[cvvResponse]
      ,[Version]
      ,[couponCode]
      ,[discountAmt]
      ,[cageCode]
      ,[awardID]
      ,[versionNumber]
      ,[invoiceEmail]
      ,[trackingEmail]
  FROM [bfdb].[dbo].[Orders]

1个orderid可以有多个项目编号,同一采购订单的数量很大

我附加了存储过程结果的快照和orderdetails表数据enter image description here(存储过程结果数据) enter image description here(订单明细表数据)

我的存储过程是

SELECT 
    o.orderID, o.orderDate, o.oStatus, e.userName, o.poNumber,
    c.customerName, c.company, o.source, 
    ((SELECT SUM(od.price * od.qty) FROM OrderDetails od WHERE o.orderID = od.orderID) 
     + o.salesTax + o.shippingFee) As Total,
    ((SELECT COUNT(od.orderID) FROM OrderDetails od WHERE o.orderID = od.orderID) 
    - (SELECT COUNT(od.orderID) FROM OrderDetails od WHERE o.orderID = od.orderID AND (fillInfo != '' OR fillInfo != null))) As Filled
FROM 
    Orders o 
JOIN 
    Customers c on o.customerID = c.customerID
JOIN 
    Employees e on o.employeeID = e.employeeID
WHERE 
    (o.employeeID > 0 AND o.oStatus = 'Active' 
     AND (((SELECT COUNT(od.orderID) FROM OrderDetails od WHERE o.orderID = od.orderID) - (SELECT COUNT(od.orderID) FROM OrderDetails od WHERE o.orderID = od.orderID AND (fillInfo != '' OR fillInfo != null))) > 0))
ORDER BY 
    o.orderID

存储过程中有填充列,显示未处理的总量。但是我仍然无法显示剩余数量的订单,因为只要为特定订单处理1个数量,来自未处理列表的数据就会消失。未处理列表中的数据显示在上面的存储过程中。

1 个答案:

答案 0 :(得分:0)

我假设“未填充”= fillInfo为空('')或NULL,对吗?在SQL 2008中,您可以使用CTE获取打开的订单列表,然后将您的查询加入CTE:

raw_tweets_stream.py