查询以区分库存和销售订单

时间:2016-06-04 01:18:55

标签: sql sql-server

我有两张桌子。表A包含一列优先级。表B包含优先级,批次和销售订单。

表A

Priority
--------
122
123
124

表B

Priority |  Lotid   | salesorderline
--------------------------------
122        |  14257  |      4   
122        |  14528  |      6  
122        |  14782  |      4  
122        |  14587  |      0  

我期待的结果如下:

Priority | TotalLot | salesorder | In Stock
-------------------------------------------
     122 |        4 |          3 |        1

如果salesorderline大于0,则销售订单大于其他库存

1 个答案:

答案 0 :(得分:3)

因此,对于Table A中的每个优先级(我将调用Priorities),您需要Table BLots)中每个行组的汇​​总数据?< / p>

有多种方法可以构建此查询。最简单的是具有谓词聚合函数的单个查询:

SELECT
    Lots.Priority,
    COUNT(*) AS TotalLots,
    COUNT(CASE WHEN SalesOrderLine  > 0 THEN 1 ELSE NULL END) AS SalesOrder,
    COUNT(CASE WHEN SalesOrderLine <= 0 THEN 1 ELSE NULL END) AS InStock
FROM
    Lots
    INNER JOIN Priorities ON Priorities.Priority = Lots.Priority
   -- this JOIN doesn't do anything because the Priorities table does not contain any useful data at this point
GROUP BY
    Priority
ORDER BY
    Priority ASC

请注意,我觉得您的数据库设计不正确 - 我不明白为什么行SalesOrder / Lot行应该表示某些东西是否有库存,并且重载{{ 1}}赋予它意义是一种糟糕的设计。