我试图用sql填充存储表。有两种类型的存储项目,产品和cols。产品包括cols和table' prodcols'用于链接。
我有:
Orderlines
- productID
- orderQTY
ProdCols
- productID
- colID
- colQTY
Storage
- itemID (can be productID or colID)
- itemType (Product or Col)
- itemName
- itemQTY
需要的结果:
itemType | itemID | itemName | itemQTY | itemOrderQTY | itemFreeQTY
Product | 1001 | *name* | 50 | 20 | 30
Col | C101 | *name* | 80 | 60 | 20
SUM of orderQTYs (of each productID) AS itemOrderQTY
itemQTY - itemOrderQTY AS itemFreeQTY
itemQTY is maintained by other parts of software
我已经找到了一种方法来列出需要qtys的产品或cols但不知道如何用single子句列出它们。最终结果包括一些WHERE变量以快速缩小结果,例如itemName。
我尝试cols,但有效但很慢:
(SELECT ProdCols.ColQTY*(SELECT SUM(OrderQTY)FROM Orderlines WHERE productID
IN (SELECT ProductID FROM ProdCols WHERE ProdCols.ColID=storage.itemID) AND ..)
AS itemOrderQTY
FROM Storage, Orderlines, ProdCols
GROUP BY Storage.Itemid, Storage.type, Storage.name, Storage.qty..
对于产品,这可行:
(SELECT SUM(orderlines.orderQTY) FROM orderlines
WHERE orderlines.productID=storage.itemID AND ...) AS itemOrderQTY
FROM storage, orderlines
GROUP BY storage.itemID,storage.itemType,storage.itemName, storage.ItemQTY
有没有办法让UNION这两个?为什么cols的表现非常慢?
我正在使用自定义平台运行ms sql server express。
PS。对于错误的命名问题感到抱歉,只是无法想出更好的一个......
答案 0 :(得分:0)
你看起来像这样吗?
Select S.ItemName, S.itemQty, p.ProductId, p1.ColId, p1.ColQty,
Sum(o.OrderQty) over(partition by p.ProductId) as ItemOrderQty,
S.ItemQty - Sum(o.OrderQty) over(partition by p.ProductId) as ItemFreeQty
from Storage s
left join ProdCols p
on s.ItemId = P.ProductID
and s.itemType = 'Product'
left join ProdCols P1
on s.ItemId = P.ColId
and s.itemType = 'Col'
left join OrderLines o
on p.ProductId = o.ProductId
您可能需要根据您的要求更改为某些表的内部联接