我有两张桌子。表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大于它的salesorder,则为股票。
发布于 2016-06-04 01:32:37
因此,对于Table A中的每个优先级(我将称之为Priorities),您希望在Table B (Lots)中的每一行组上聚集数据?
构建此查询的方法有多种。最简单的查询是一个带有谓词聚合函数的查询:
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行应该表示什么是库存的,而重载SalesOrderLine给出它的意义是一个糟糕的设计。
https://stackoverflow.com/questions/37625435
复制相似问题