Вы можете использовать условное агрегирование , чтобы упростить логику и выполнить операции в одном запросе:
SELECT
pm.Prod_ID,
pm.Product_Name,
ISNULL(SUM(CASE WHEN Feed_Type = 0 THEN psd.Quantity ELSE 0 END), 0)
- ISNULL(SUM(CASE WHEN Feed_Type = 1 THEN psd.Quantity ELSE 0 END), 0) AS Quantity_Diff
INTO #MyTempTable3
FROM
dbo.[TBL_ProductStock_Details] psd
INNER JOIN dbo.Tbl_Product_master pm
ON psd.Prod_ID = pm.Prod_ID
WHERE Feed_type IN (0, 1)
GROUP BY
pm.Prod_ID,
pm.Product_Name
В зависимости от распределения NULLs
в столбце Quantity
Кроме того, можно также упростить с помощью одного SUM()
:
SELECT
pm.Prod_ID,
pm.Product_Name,
SUM(CASE
WHEN Feed_Type = 0 THEN ISNULL(psd.Quantity, 0)
ELSE -1 * ISNULL(psd.Quantity, 0)
END) AS Quantity_Diff
INTO #MyTempTable3
FROM
dbo.[TBL_ProductStock_Details] psd
INNER JOIN dbo.Tbl_Product_master pm
ON psd.Prod_ID = pm.Prod_ID
WHERE Feed_type IN (0, 1)
GROUP BY
pm.Prod_ID,
pm.Product_Name
Примечание: рассмотрите возможность индексирования столбца Feed_type
с таблицей, к которой он принадлежит;как вы спрашиваете, этого нельзя сказать, что делает его менее понятным.