Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择不同的选项作为值_Sql_Sql Server_Select_Join - Fatal编程技术网

Sql 如何选择不同的选项作为值

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

我正在尝试用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 | 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的东西是如何工作的,但我明天会试试,谢谢。