Справочная информация: У меня есть система, которая отслеживает инвентарь, который заказан и отправлен в различные места.Существует таблица инвентаризации, которая содержит все специфичные для инвентаря свойства и сколько первоначально было заказано для каждого предмета:
Таблица инвентаризации
CREATE TABLE Inventory
(
InventoryID int,
InventoryName varchar,
AmtOrdered float,
Weight float,
Color string
)
Тогда у меня есть инвентаризация транспортатаблица, которая действует как историческая запись движения этих Упорядоченных предметов, когда они достигают конечной точки
InventoryTransproduction Table
CREATE TABLE InventoryTransportation
(
InventoryTransportationId int,
fkInventoryId int,
AmtTransported float,
FromLocation string,
ToLocation string
)
Есть определенные места, в которых эти предметыпройти через, чтобы добраться до конечного местоположения.(Поставщик -> Склад, Продавец -> Сайт, Склад -> Сайт, Склад -> Продавец, Сайт -> Продавец).
Столбцы, которые мне нужно рассчитать: Кол-во на Продавце, Кол-во на Складе и Кол-во на Месте.
В настоящее время я просто возвращаю все исторические данные и вычисляю эти значения на своем бизнес-уровне.Но было бы намного проще, если бы я просто делал это на стороне базы данных, что, вероятно, сделало бы это намного эффективнее, чем я.
Теперь я вычисляю вещи следующим образом:
Кол-во у продавца = AmtOrdered + Sum (AmtTransported где ToLocation = Vendor) - Sum (AmtTransported where FromLocation = Vendor)
Кол-во на складе = Сумма (AmtTransported где ToLocation = Склад) - Сумма (AmtTransported где FromLocation = Склад)
Кол-во на сайте = Sum (AmtTransported где ToLocation = Сайт) - Сумма (AmtTransported где FromLocation = Сайт)
Вопрос Есть ли способ написать запрос, который бы возвращал суммы в виде столбцов, связанных с записью инвентаризации, к которой они принадлежат?
Я начал с выполнения подзапросов Left Join для выполнения вычислений, но я не знаю, как сделать суммарную сумму с +, если она находится из местоположения или-если это в часть местоположения формулы, и я не знаюкак вернуть несколько столбцов из этого подзапроса (или если мне нужно использовать несколько подзапросов) для каждой из величин.
Я думаю, чтобы сделать несколько столбцов, я должен выяснить, как использовать SQLКоманда Pivot, но я не совсем понял, как это использовать.
Любая помощь будет принята с благодарностью
ОБНОВЛЕНИЕ В настоящее время для этого я добавил серию LeftJoins для вычисления каждой отдельной метрики в отдельности.Это работает, но я не знаю, правильно ли это делать.
SELECT
Ordered = ps.quantity
,[@Vendor] = ps.Quantity - COALESCE(psrToVendor.ToVendor, 0) - COALESCE(psrFromVendor.FromVendor, 0)
FROM Project.ProjectSpec ps
LEFT JOIN
(
SELECT
psrd.ProjectSpecID
,ToVendor = SUM(psrd.QuantityReceived)
FROM Project.ProjectSpecReceivedDetails psrd
WHERE
psrd.Deleted = 0
AND psrd.ToProjectSpecLocationID = 1
GROUP BY psrd.ProjectSpecID
) psrToVendor ON psrToVendor.ProjectSpecID = ps.ID
LEFT JOIN
(
SELECT
psrd.ProjectSpecID
,FromVendor = SUM(psrd.QuantityReceived)
FROM Project.ProjectSpecReceivedDetails psrd
WHERE
psrd.Deleted = 0
AND psrd.FromProjectSpecLocationID = 1
GROUP BY psrd.ProjectSpecID
) psrFromVendor ON psrFromVendor.ProjectSpecID = ps.ID