我想用sql填充存储表。有两种类型的存储项目,产品和列。产品由cols组成,并有用于链接的“prodcols”表。如何选择不同的选项AS值
我:
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
我已经实现的方式列出任何产品或使用的cols需要qtys但不知道如何与单列出他们俩条款。最终结果包括几个带变量的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。对不起,命名不好的问题,只是不能拿出更好的一个..
好一些表,如果你知道怎么做各,你可以使用一个工会结合每个然后'插入到表中选择工会B'?无论你的SQL我有点失去了你想要做的事情。看起来你需要加入prodcols来为productID存储一次,而colid则需要一个prodID和colID始终有一个值或其他空值。如果是这样,一个联合似乎是去这里的方式或一个有条件的'或联合'......但我认为工会更清洁/更容易维护。 – xQbert
其他所有应该只是选择,但'itemOrderQTY'我需要为任一productID选择SUM(qty)或找出哪些pID使用某些colID和SUM数量的那些。 我得到它的工作方式也很慢,所以它可能有错误。 – rami
编辑问题W /你的企图。更容易阅读。 – xQbert