如何仅在SQL中将此视图设置为第一列上的SELECT DISTINCT

时间:2015-08-04 13:56:16

标签: sql view sql-server-2012 group-by having

我不习惯使用SQL进行View Creation,它迫使我使用HAVING和GROUP BY,在标准的SQL语句中我会使用WHERE但显然不允许这样做。我想在dbo上选择DISTINCT。[ShowTex Belgie NV $ Item]。仅限。但它也结合了我在GROUP BY中添加的任何内容。我不能在列上使用HAVING,除非我将它们包含在GROUP BY中。走到这一步已经花了我很多年。 :/我只是想创建一个简单的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_ 

1 个答案:

答案 0 :(得分:1)

首先,您为什么要使用distinctgroup 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_;

表别名也使查询更具可读性。