2016-05-12 23 views
1

我創建了顯示當前正在等待一個產品的總數量查詢的第一部分被髮送給客戶&返回我從Item表中的項目編號 -我需要SQL視圖上的子查詢嗎?

SELECT 
    [Item].[ItemNum], 
    SUM([Sales].[Quantity]) AS [Qty] 
FROM [dbo].[Item] 
LEFT OUTER JOIN [dbo].[Sales] 
    ON [Item].[ItemNum] = [Sales].[ItemNum] 
WHERE ([Sales].[Sale Type] = 1) 
GROUP BY [Item].[ItemNum] 

那偉大工程,我得到該項目的目錄號碼和訂購數量。現在我需要加入到另一張表格中,該表格顯示了物品的庫存情況。這就是查詢的樣子 -

SELECT 
    [Item].[ItemNum] SUM ([Sales].[Quantity]) AS [Qty], SUM ([Stock].[Remaining Quantity]) 
AS [Free Stock] 
FROM [dbo].[Item] 
LEFT OUTER JOIN dbo.[Sales] 
    ON [Item].[ItemNu]m = [Sales].[ItemNum] 
LEFT OUTER JOIN [dbo].[Stock] 
    ON [Item].[ItemNum] = [Stock].[ItemNum] 
WHERE ([Sales].[Document Type] = 1) 
GROUP BY [Item].[ItemNum] 

現在訂購數量已經過期,庫存數量也是錯誤的。由於我在銷售表中應用了「哪裏」,但它不適用於庫存表,我是否需要將其移出?

感謝

+1

沒有看到其產生的問題什麼是要一些樣本數據這是一個猜測。 –

回答

0

在這種情況下Common Table Expression是有用的:

With CTE As (
SELECT 
    [Item].[ItemNum], 
    SUM([Sales].[Quantity]) AS [Qty] 
FROM [dbo].[Item] 
LEFT OUTER JOIN [dbo].[Sales] 
    ON [Item].[ItemNum] = [Sales].[ItemNum] 
WHERE ([Sales].[Sale Type] = 1) 
GROUP BY [Item].[ItemNum] 
) 
    Select * 
    From CTE Left Outer Join 
    [dbo].[Stock] 
    ON [CTE].[ItemNum] = [Stock].[ItemNum] 
+0

是的,我現在有點接近!我的庫存數量現在正確,但銷售數量(來自CTE)仍然不正確。試圖找出可能的原因。 – SeekWhat

+0

我最終使用了多個CTE - 非常感謝您的幫助! – SeekWhat

1

我不知道這是否會解決您的問題,但在where子句把你左連接到內連接。試試這個。

SELECT 
    dbo.[databasename$Item].ItemNum, SUM (dbo.[databasename$Sales].Quantity) AS [Qty], SUM (dbo.[databasename$Stock.[Remaining Quantity]) 
AS [Free Stock] 
FROM dbo.[databasename$Item] 
LEFT OUTER JOIN dbo.[databasename$Sales] 
    ON dbo.[databasename$Item].ItemNum = dbo.[databasename$Sales].ItemNum 
    AND (dbo.[databasename$Sales].[Document Type] = 1) 
LEFT OUTER JOIN dbo.[databasename$Stock] 
    ON dbo.[databasename$Item].ItemNum = dbo.[databasename$Stock].[ItemNum] 
GROUP BY dbo.[databasename$Item].ItemNum 

試試這個,看看它是否修復該問題:

SELECT 
    dbo.[databasename$Item].ItemNum, [databasename$Sales].Quantity) AS [Qty], [databasename$Stock.[Remaining Quantity]) 
AS [Free Stock] 
FROM dbo.[databasename$Item] 
LEFT OUTER JOIN (select ItemNum, sum(quantity) as Quantity from dbo.[databasename$Sales] where Document Type = 1group by ItemNum) as databasename$Sales 
    ON dbo.[databasename$Item].ItemNum = [databasename$Sales].ItemNum 
LEFT OUTER JOIN (select ItemNum, sum(quantity) as RemainingQuantity from dbo.[databasename$Stock]roup by ItemNum) 
as databasename$Stock 
    ON dbo.[databasename$Item].ItemNum = [databasename$Stock].[ItemNum] 
GROUP BY dbo.[databasename$Item].ItemNum 
+0

謝謝你的回覆,但它沒有解決問題。 – SeekWhat

+0

但它會阻止你過濾掉你不想過濾掉的記錄。你應該閱讀:http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

+0

對不起,應該說它沒有解決原來的問題,但我現在看到它將如何幫助一般查詢。 – SeekWhat