ASKER
SELECT
dbo.SalesProposal.SalesProposalID,
dbo.Product.Product,
ISNULL(ProductBreakdown.InvoicedQuantity, 0) AS InvoicedQuantity,
ISNULL(ProductBreakdown.InvoicedAmount, 0) AS InvoicedAmount,
ISNULL(DispatchDerived.DeliveredQuantity, 0) AS DeliveredQuantity
FROM dbo.SalesProposal
INNER JOIN dbo.SalesProposalStatus ON dbo.SalesProposal.StatusID = dbo.SalesProposalStatus.SalesProposalStatusID AND dbo.SalesProposalStatus.SalesProposalStatus = 'Sold'
LEFT OUTER JOIN
(SELECT dbo.Dispatch.SalesProposalID, dbo.Dispatch.ProductID, ISNULL(SUM(dbo.Dispatch.Weight * dbo.Dispatch.ConversionFactor), 0) AS DeliveredQuantity
FROM dbo.Dispatch GROUP BY dbo.Dispatch.SalesProposalID, dbo.Dispatch.ProductID) AS DispatchDerived ON DispatchDerived.SalesProposalID = dbo.SalesProposal.SalesProposalID
LEFT OUTER JOIN
(SELECT dbo.Invoice.SalesProposalID, InvoiceItemDerived.ProductID, ISNULL(SUM(InvoiceItemDerived.InvoicedQuantity), 0) As InvoicedQuantity, ISNULL(SUM(InvoiceItemDerived.InvoicedAmount), 0) As InvoicedAmount
FROM dbo.Invoice LEFT OUTER JOIN
(SELECT dbo.InvoiceItem.InvoiceID, dbo.InvoiceItem.ProductID, ISNULL(SUM(dbo.InvoiceItem.Quantity), 0) AS InvoicedQuantity, ISNULL(SUM(dbo.InvoiceItem.Quantity * dbo.InvoiceItem.Price), 0) AS InvoicedAmount
FROM dbo.InvoiceItem GROUP BY dbo.InvoiceItem.InvoiceID, InvoiceItem.ProductID) AS InvoiceItemDerived on Invoice.InvoiceID = InvoiceItemDerived.InvoiceID GROUP BY dbo.Invoice.SalesProposalID, InvoiceItemDerived.ProductID) AS ProductBreakdown ON dbo.SalesProposal.SalesProposalID = ProductBreakdown.SalesProposalID
INNER JOIN dbo.Product ON dbo.Product.ProductID = DispatchDerived.ProductID OR dbo.Product.ProductID = ProductBreakdown.ProductID
ASKER
ASKER
ASKER
ASKER
;WITH cte
AS (SELECT *
FROM dbo.SalesProposal SP
INNER JOIN dbo.SalesProposalStatus SPS
ON SP.StatusID = SPS.SalesProposalStatusID
AND SPS.SalesProposalStatus = 'Sold'),
dispatchderived
AS (SELECT D.SalesProposalID,
D.ProductID,
ISNULL(SUM(D.Weight * D.ConversionFactor), 0) AS DeliveredQuantity
FROM dbo.Dispatch D
WHERE EXISTS (SELECT 1
FROM dbo.Product P
WHERE D.ProductID = P.ProductID)
GROUP BY D.SalesProposalID,
D.ProductID),
productbreakdown
AS (SELECT I.SalesProposalID,
InvoiceItemDerived.ProductID,
ISNULL(SUM(InvoiceItemDerived.InvoicedQuantity), 0) AS InvoicedQuantity,
ISNULL(SUM(InvoiceItemDerived.InvoicedAmount), 0) AS InvoicedAmount
FROM dbo.Invoice I
LEFT OUTER JOIN (SELECT II.InvoiceID,
II.ProductID,
ISNULL(SUM(II.Quantity), 0) AS InvoicedQuantity,
ISNULL(SUM(II.Quantity * II.Price), 0) AS InvoicedAmount
FROM dbo.InvoiceItem II
GROUP BY II.InvoiceID,
II.ProductID) AS InvoiceItemDerived
ON I.InvoiceID = InvoiceItemDerived.InvoiceID
WHERE EXISTS (SELECT 1
FROM dbo.Product P
WHERE D.productid = InvoiceItemDerived.ProductID)
GROUP BY I.SalesProposalID,
InvoiceItemDerived.ProductID) SELECT c1.SalesProposalID,
PB.ProductID,
ISNULL(PB.InvoicedQuantity, 0) AS InvoicedQuantity,
ISNULL(PB.InvoicedAmount, 0) AS InvoicedAmount,
0 DeliveredQuantity
FROM cte c1
JOIN productbreakdown PB
ON c1.SalesProposalID = PB.SalesProposalID
UNION ALL
SELECT c1.SalesProposalID,
DD.ProductID,
0 InvoicedQuantity,
0 InvoicedAmount,
ISNULL(DD.DeliveredQuantity, 0) AS DeliveredQuantity
FROM cte c1
JOIN dispatchderived DD
ON c1.SalesProposalID = DD.SalesProposalID
ASKER
WHERE EXISTS (SELECT 1
FROM dbo.Product P
WHERE D.productid = InvoiceItemDerived.ProductID)
ASKER
ASKER
ASKER
SELECT
derived.SalesProposalID
, dbo.Product.Product
, derived.ProductID
, derived.InvoicedQuantity
, derived.InvoicedAmount
, derived.DeliveredQuantity
FROM (
SELECT
coalesce(DispatchDerived.SalesProposalID , ProductBreakdown.SalesProposalID) as SalesProposalID
, coalesce(DispatchDerived.ProductID, ProductBreakdown.ProductID) as ProductID
, ISNULL(ProductBreakdown.InvoicedQuantity, 0) AS InvoicedQuantity
, ISNULL(ProductBreakdown.InvoicedAmount, 0) AS InvoicedAmount
, DispatchDerived.DeliveredQuantity
FROM (
SELECT dbo.Dispatch.SalesProposalID
, dbo.Dispatch.ProductID
, ISNULL(SUM(dbo.Dispatch.Weight * dbo.Dispatch.ConversionFactor), 0) AS DeliveredQuantity
FROM dbo.Dispatch
GROUP BY dbo.Dispatch.SalesProposalID
, dbo.Dispatch.ProductID
) AS DispatchDerived
FULL OUTER JOIN (
SELECT dbo.Invoice.SalesProposalID
, InvoiceItemDerived.ProductID
, ISNULL(SUM(InvoiceItemDerived.InvoicedQuantity), 0) AS InvoicedQuantity
, ISNULL(SUM(InvoiceItemDerived.InvoicedAmount), 0) AS InvoicedAmount
FROM dbo.Invoice
LEFT JOIN (
SELECT dbo.InvoiceItem.InvoiceID
, dbo.InvoiceItem.ProductID
, ISNULL(SUM(dbo.InvoiceItem.Quantity), 0) AS InvoicedQuantity
, ISNULL(SUM(dbo.InvoiceItem.Quantity * dbo.InvoiceItem.Price), 0) AS InvoicedAmount
FROM dbo.InvoiceItem
GROUP BY dbo.InvoiceItem.InvoiceID
, InvoiceItem.ProductID
) AS InvoiceItemDerived ON Invoice.InvoiceID = InvoiceItemDerived.InvoiceID
GROUP BY dbo.Invoice.SalesProposalID
, InvoiceItemDerived.ProductID
) AS ProductBreakdown
) as derived
INNER JOIN dbo.Product ON derived.ProductID = dbo.Product.ProductID
ASKER
WITH cte
AS (SELECT *
FROM dbo.SalesProposal SP
INNER JOIN dbo.SalesProposalStatus SPS ON SP.StatusID = SPS.SalesProposalStatusID AND SPS.SalesProposalStatus = 'Sold'),
dispatchderived
AS (SELECT D.SalesProposalID, D.ProductID, ISNULL(SUM(D.Weight * D.ConversionFactor), 0) AS DeliveredQuantity
FROM dbo.Dispatch D
WHERE EXISTS (SELECT 1 FROM dbo.Product P WHERE D.ProductID = P.ProductID)
GROUP BY D.SalesProposalID, D.ProductID),
productbreakdown
AS (SELECT I.SalesProposalID, InvoiceItemDerived.ProductID, ISNULL(SUM(InvoiceItemDerived.InvoicedQuantity), 0) AS InvoicedQuantity, ISNULL(SUM(InvoiceItemDerived.InvoicedAmount), 0) AS InvoicedAmount
FROM dbo.Invoice I
LEFT OUTER JOIN (SELECT II.InvoiceID, II.ProductID, ISNULL(SUM(II.Quantity), 0) AS InvoicedQuantity, ISNULL(SUM(II.Quantity * II.Price), 0) AS InvoicedAmount
FROM dbo.InvoiceItem II GROUP BY II.InvoiceID, II.ProductID) AS InvoiceItemDerived
ON I.InvoiceID = InvoiceItemDerived.InvoiceID
WHERE EXISTS (SELECT 1
FROM dbo.Product P
WHERE P.productid = InvoiceItemDerived.ProductID)
GROUP BY I.SalesProposalID,
InvoiceItemDerived.ProductID)
SELECT c1.SalesProposalID, PB.ProductID, ISNULL(PB.InvoicedQuantity, 0) AS InvoicedQuantity, ISNULL(PB.InvoicedAmount, 0) AS InvoicedAmount, 0 DeliveredQuantity
FROM cte c1 JOIN productbreakdown PB ON c1.SalesProposalID = PB.SalesProposalID
UNION ALL
SELECT c1.SalesProposalID, DD.ProductID, 0 InvoicedQuantity, 0 InvoicedAmount, ISNULL(DD.DeliveredQuantity, 0) AS DeliveredQuantity
FROM cte c1
JOIN dispatchderived DD ON c1.SalesProposalID = DD.SalesProposalID
ASKER
ASKER
ASKER
Microsoft SQL Server is a suite of relational database management system (RDBMS) products providing multi-user database access functionality.SQL Server is available in multiple versions, typically identified by release year, and versions are subdivided into editions to distinguish between product functionality. Component services include integration (SSIS), reporting (SSRS), analysis (SSAS), data quality, master data, T-SQL and performance tuning.
TRUSTED BY
SELECT DISTINCT ID1, ..., Value1, Value2, Value3
FROM ...
...