我需要 SQL 视图的子查询吗?
Do I Need a Subquery on SQL View?
我创建了查询的第一部分,它显示了当前等待发送给客户的产品的总数量 & returns 我从 Item
table -
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]
太棒了,我得到了商品的目录号以及订购的数量。现在我需要加入另一个 table,它会显示物品库存。这就是查询的样子 -
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]
现在订货数量出问题了,库存数量也不对。由于我已将 'where' 应用于销售 table 但不适用于库存 table,我是否需要将其移出?
谢谢
我不知道它是否能解决您的问题,但 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
在这种情况下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]
我创建了查询的第一部分,它显示了当前等待发送给客户的产品的总数量 & returns 我从 Item
table -
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]
太棒了,我得到了商品的目录号以及订购的数量。现在我需要加入另一个 table,它会显示物品库存。这就是查询的样子 -
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]
现在订货数量出问题了,库存数量也不对。由于我已将 'where' 应用于销售 table 但不适用于库存 table,我是否需要将其移出?
谢谢
我不知道它是否能解决您的问题,但 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
在这种情况下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]