Ich versuche, Speichertabelle mit SQL zu füllen. Es gibt zwei Arten von Speicherelementen, Produkten und Spalten. Produkte bestehen aus Spalten und haben Tabellen "Produkte" zum Verknüpfen.Wie SELECT verschiedene Optionen AS Wert
ich habe:
Orderlines
- productID
- orderQTY
ProdCols
- productID
- colID
- colQTY
Storage
- itemID (can be productID or colID)
- itemType (Product or Col)
- itemName
- itemQTY
benötigt Ergebnis:
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
ich einen Weg erreicht haben, entweder Produkte oder cols mit benötigt qtys zur Liste aber nicht wissen, wie sie zur Liste sowohl mit Single Klausel. Das Endergebnis enthält einige WHERE mit Variablen, um die Ergebnisse schnell einzugrenzen, z. B. itemName.
Mein Versuch für cols, funktioniert aber nur langsam:
(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..
Für Produkte, das funktioniert ok:
(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
Gibt es eine Möglichkeit, diese zwei zu UNION? Warum läuft der für Cols sehr langsam?
Ich benutze MS SQL Server Express mit benutzerdefinierten Plattform.
ps. Entschuldigung für schlechte Benennung für Frage, konnte einfach nicht mit besseren ..
Nun, wenn Sie wissen, wie jeder zu tun, können Sie eine Vereinigung verwenden jeweils kombinieren und dann 'in Tabelle einfügen wählen Eine Vereinigung B'? Ohne deine SQL bin ich etwas verloren in dem, was du versuchst zu tun. Es sieht so aus, als müssten Sie prodcols einmal für productID und einmal für colId mit prodID und cOLID mit dem Speicher verbinden, der immer einen Wert oder die andere Null hat. Wenn ja, scheint eine Gewerkschaft der Weg zu sein, hier zu gehen oder eine bedingte "oder beitreten" ... aber ich denke, die Union ist sauberer/leichter zu pflegen. – xQbert
Alles andere sollte nur auswählen, aber für 'itemOrderQTY' muss ich SUMME (Menge) für jede Produkt-ID auswählen oder herausfinden, welche PIDs bestimmte COLID- und SUM-Mengen davon verwenden. Die Art, wie ich es funktionierte, war auch sehr langsam durchzuführen, so hat es wahrscheinlich etwas falsch .. – rami
Bearbeiten Sie die Frage mit Ihrem Versuch. leichter zu lesen. – xQbert