我不习惯使用SQL进行View Creation,它迫使我使用HAVING和GROUP BY,在标准的SQL语句中我会使用WHERE但显然不允许这样做。我想
SELECT DISTINCT TOP (100) PERCENT dbo.[ShowTex Belgie NV$Item].No_, SUM(dbo.[ShowTex Belgie NV$Warehouse Entry].Quantity) AS [Quantity Sum]
FROM dbo.[ShowTex Belgie NV$Item]
LEFT OUTER JOIN dbo.[ShowTex Belgie NV$Warehouse Entry] ON dbo.[ShowTex Belgie NV$Item].No_ = dbo.[ShowTex Belgie NV$Warehouse Entry].[Item No_]
GROUP BY dbo.[ShowTex Belgie NV$Item].No_, dbo.[ShowTex Belgie NV$Warehouse Entry].[Bin Code]
HAVING (dbo.[ShowTex Belgie NV$Warehouse Entry].[Bin Code] <> 'SHIPPING') OR
(dbo.[ShowTex Belgie NV$Warehouse Entry].[Bin Code] <> 'VERZEND') OR
(dbo.[ShowTex Belgie NV$Warehouse Entry].[Bin Code] <> 'WORKSHOP')
ORDER BY dbo.[ShowTex Belgie NV$Item].No_
使用Server Studio Managment 2012,但似乎没有标签。
根据Gordon Linoff的回答,我的SQL查询变为
SELECT TOP (100) PERCENT i.No_, SUM(we.Quantity) AS [Quantity Sum]
FROM dbo.[ShowTex Belgie NV$Item] AS i LEFT OUTER JOIN
dbo.[ShowTex Belgie NV$Warehouse Entry] AS we ON i.No_ = we.[Item No_]
WHERE (we.[Bin Code] NOT IN ('SHIPPING', 'VERZEND', 'WORKSHOP'))
GROUP BY i.No_
ORDER BY i.No_
答案 0 :(得分:1)
首先,您为什么要使用distinct
和group by
?其次,这个版本出了什么问题:
SELECT i.No_, SUM(dbo.we.Quantity) AS [Quantity Sum]
FROM dbo.[ShowTex Belgie NV$Item] i LEFT OUTER JOIN
dbo.[ShowTex Belgie NV$Warehouse Entry] we
ON i.No_ = we.[Item No_]
WHERE we.[Bin Code] NOT IN ('SHIPPING', 'VERZEND', 'WORKSHOP')
GROUP BY i.No_, we.[Bin Code]
ORDER BY i.No_;
表别名也使查询更具可读性。