如何选择SELECT不同的选项AS值

时间:2017-06-05 20:04:56

标签: sql sql-server select join

我试图用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。对于错误的命名问题感到抱歉,只是无法想出更好的一个......

1 个答案:

答案 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

您可能需要根据您的要求更改为某些表的内部联接

相关问题