Das Problem ist derjenige, der die Tabellen nicht ich gemacht hat. Dieses Problem basiert auf der Datenbankanpassung. Also Leute, ich brauche deine Hilfe.SUM mit mehreren Tabellen MySQL
Ich habe Tabellen, die SUM die der Items sein muss.
Ich benutze diesen Code die quantaties items
-orderset_details
Tisch zu bekommen.
SELECT
I.ItemId, I.Code, I.Item, I.Minimum, I.Maximum,
IFNULL
(
(
SELECT SUM(ROUND(h.Quantity))
FROM orderset_details AS H
WHERE H.ItemId = I.ItemId
)
, 0
) as 'Balance'
FROM items AS I
GROUP BY I.ItemId
OUTPUT
Aber es gibt Tabellen, die ein NEGATIVE Menge sein muss. Mein Code erhält nur alle Mengen für 1 Artikel zur Zeit.
SELECT
sts.TransferDate as 'Transaction Date'
, sts.TransNumber as 'Document Number'
, orderset_details.Quantity as 'Quantity'
, '' as 'Po Number'
, '' as 'Sales Invoice'
, orderset_details.Cost as 'Cost'
, orderset_details.SerialNumber as 'Serial Number'
, orderset_details.LotNumber as 'Lot Number'
, location.Location as 'Location'
FROM sts
LEFT JOIN orderset_details ON sts.OrdersetId = orderset_details.OrdersetId
LEFT JOIN location ON location.LocationId = sts.LocationIdTo
WHERE orderset_details.ItemId = '4786'
UNION
SELECT
drs.OrderDate
, drs.TransNumber
, orderset_details.Quantity
, drs.PONumber
, ''
, orderset_details.Cost
, orderset_details.SerialNumber
, orderset_details.LotNumber
, suppliers.Supplier
FROM drs
LEFT JOIN orderset_details ON drs.OrdersetId = orderset_details.OrdersetId
LEFT JOIN suppliers ON suppliers.SupplierId = drs.SupplierId
WHERE orderset_details.ItemId = '4786'
UNION
SELECT
stockadjustment.TransactionDate
, stockadjustment.TransactionId
, IF(reason.AddsToStock = '1', orderset_details.Quantity, 0 - orderset_details.Quantity)
, ''
, ''
, orderset_details.Cost
, orderset_details.SerialNumber
, orderset_details.LotNumber
, location.Location
FROM stockadjustment
LEFT JOIN reason ON reason.ReasonId = stockadjustment.ReasonId
LEFT JOIN orderset_details ON stockadjustment.OrdersetId = orderset_details.OrdersetId
LEFT JOIN location ON location.LocationId = stockadjustment.LocationId
WHERE orderset_details.ItemId = '4786'
UNION
SELECT
issueslip.OrderDate
, issueslip.TransNumber
, IF(issueslip.OrdersetId = orderset_details.OrdersetId, 0 - orderset_details.Quantity, -1 * orderset_details.Quantity)
, ''
, ''
, orderset_details.Cost
, orderset_details.SerialNumber
, orderset_details.LotNumber
, customers.Customer
FROM issueslip
LEFT JOIN orderset_details ON issueslip.OrdersetId = orderset_details.OrdersetId
LEFT JOIN customers ON customers.CustomerId = issueslip.CustomerId
WHERE orderset_details.ItemId = '4786'
UNION
SELECT
invoice.OrderDate
, invoice.TransNumber
, IF(invoice.OrdersetId = orderset_details.OrdersetId, 0 - orderset_details.Quantity, -1 * orderset_details.Quantity)
, ''
, ''
, orderset_details.Cost
, orderset_details.SerialNumber
, orderset_details.LotNumber
, customers.Customer
FROM invoice
LEFT JOIN orderset_details ON invoice.OrdersetId = orderset_details.OrdersetId
LEFT JOIN customers ON customers.CustomerId = invoice.CustomerId
WHERE orderset_details.ItemId = '4786'
ich nur von diesem Kodex müssen, ist für die Negative Quantity Condition
LIKEIF(reason.AddsToStock = '1', orderset_details.Quantity, 0 - orderset_details.Quantity)
und 2 andere mehr Abfrage.
WIE KANN ICH DIESE FRAGE MIT MEINER ERSTEN FRAGE VERBINDEN?
Okay, es krank versuchen :) –
Die Abfrage dauert mehr als 300 Sekunden –
Überprüfen Sie, ob Ihre Datenbank Primärschlüssel für jede der beteiligten Tabellen und Indizes für die ausländischen hat Schlüssel, die in der Abfrage verwendet werden. Ist das der Fall? Können Sie auch bestätigen, dass "OrdersetId" eine eindeutige Spalte in 'stockadjustment' ist? – trincot