Sql 如何选择不同的选项作为值
我正在尝试用sql填充存储表。有两种类型的存储项目,产品和COL。产品由COL组成,并具有用于链接的表“prodcols” 我有:Sql 如何选择不同的选项作为值,sql,sql-server,select,join,Sql,Sql Server,Select,Join,我正在尝试用sql填充存储表。有两种类型的存储项目,产品和COL。产品由COL组成,并具有用于链接的表“prodcols” 我有: Orderlines - productID - orderQTY ProdCols - productID - colID - colQTY Storage - itemID (can be productID or colID) - itemType (Product or Col) - itemName - itemQTY 所需成果: itemType
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
我已经找到了一种方法,用所需的QTY列出产品或COL,但不知道如何用单个子句列出它们。最终结果包括一些可以快速缩小结果范围的变量,例如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
有办法把这两个人结合起来吗?为什么cols的表现很慢
我正在使用自定义平台运行ms sql server express
另外,很抱歉问题的命名不好,只是找不到更好的。你看起来像这样吗
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
您可能需要根据您的要求更改某些表的内部联接如果您知道如何进行每个操作,您是否可以使用一个union组合每个表,然后
插入到表中选择一个union B
?没有你的SQL,我对你要做的事情有点茫然。看起来您需要将prodcols连接到存储中,一次用于productID,另一次用于colId,prodID和colId始终有一个值或另一个值为null。如果是这样的话,一个联盟似乎是一条通往这里的道路,或者一个有条件的或加入。。。但我认为这个联合体更干净/更容易维护。其他一切都应该选择,但对于“itemOrderQTY”,我需要为productID选择总和(qty),或者找出pID使用的某些colID和它们的总和。我让它工作的方式执行起来也很慢,所以它可能出了什么问题1.编辑你的问题。更容易阅读。我不这么认为,因为预期的结果在不同的行中有product和col类型。这会使它们处于相同的状态,不是吗?我不太明白这些over/partition的东西是如何工作的,但我明天会试试,谢谢。