我有两张桌子。表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,则销售订单大于其他库存
答案 0 :(得分:3)
因此,对于Table A
中的每个优先级(我将调用Priorities
),您需要Table B
(Lots
)中每个行组的汇总数据?< / 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}}赋予它意义是一种糟糕的设计。