0
问题是谁使桌子不是我。这个问题基于数据库适配。所以,我需要你们的帮助。SUM与多个表MySQL
我有表需要SUM的Quantity
的项目。
我用这个代码来获得从items
到orderset_details
表的Quantaties。
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
输出
但也有需要是负数量表。我的代码在一次只能获得1项的所有数量。
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'
我只是从这个代码需要的是为Negative Quantity Condition
LIKEIF(reason.AddsToStock = '1', orderset_details.Quantity, 0 - orderset_details.Quantity)
和2等多个查询。
如何将这些查询结合到我的第一条查询上?
好生病试试吧:) –
查询时间超过300秒 –
检查您的数据库的每个在国外所涉及的表和索引的主键的详细在查询中使用的键。是这样吗?另外,您是否可以确认'OrdersetId'是'stockadjustment'中的唯一列? – trincot