私はストレージテーブルにSQLを設定しようとしています。ストレージアイテムには、商品とコラムの2つのタイプがあります。プロダクトはcolで構成され、リンクするためのテーブル '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
を私が必要qtysで製品やcolsのどちらかを一覧表示する方法を達成しているが、単一でそれらの両方を一覧表示する方法がわかりません句。最終結果には、結果をすばやく絞り込むためのWHERE with変数が含まれています(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に方法はありますか?なぜ列車が非常に遅いのですか?
私はmsプラットフォームのSQL Server Expressをカスタムプラットフォームで実行しています。
ps。申し訳ありませんが、質問の名前を付けて、より良いものを考え出すことができませんでした。
に基づいてテーブルのいくつかのために参加し、それぞれを組み合わせて、その後、 '選択テーブルに挿入組合B'? SQLのW/O私はあなたがやろうとしていることを少し失っています。 prodcolsをproductIDに1回、prodIDとcolIDが常に1つの値またはもう1つのnullを持つcolIdに一度結合する必要があるようです。もしそうなら、組合はここに行くか、条件付きの "または参加する"のように思われます...しかし、私は組合がより清潔で維持しやすいと思います。 – xQbert
他のものはすべて選択するだけですが、 'itemOrderQTY'の場合はproductIDにSUM(qty)を選択するか、pIDが特定のcolIDとsum qtyを使用するかどうかを調べる必要があります。 私はそれが働いている方法も非常に実行するのが遅かったので、おそらく何か間違っています。 – rami
あなたの試みで質問を編集してください。読むのが簡単です。 – xQbert