使用视图和WHERE语句时无法显示所需的MAX结果

时间:2019-04-22 22:59:58

标签: sql sql-server

试图在我的NumberofUnits列中显示最大项目数,其中ProductDescription以字母P开头。我的目标是仅显示一个结果,它应该仅显示“ Pants”的一个实例,其中NumberOfUnits是最大的。相反,它产生多个实例,并且未显示任何实例的最大值。我尝试了两种不同的方法,但都没有产生我想要的结果。

我应该提到我的目标是针对我的表视图运行此存储过程。我如何解决此问题以获得所需的结果,甚至在针对表视图运行时是否甚至可以在存储过程中使用像MAX这样的聚合?如果是这样,我需要怎么做才能对其进行更改? (这是我班上的一个家庭作业问题)

首先,我创建了一个表视图和一个存储过程,试图以两种不同的方式解决这个问题。一种在存储过程中仅使用MAX函数,第二种仅在表视图中使用MAX函数。都没有产生我预期的结果。

-TableView尝试

create view [dbo].[inventoryinfo1_vw] as
select InventoryOrdering.NumberOfUnits, InventoryOrdering.DateOfOrder, Product.ProductDescription, Product.ListPrice, Supplier.Name, Supplier.PhoneNumber
from Supplier
join InventoryOrdering
on InventoryOrdering.SupplierID = Supplier.SupplierID
join Product
on Product.ProductNO = InventoryOrdering.ProductNO
group by DateofOrder, ProductDescription, ListPrice, Name, PhoneNumber

-存储过程尝试

create procedure MaxInfo
as 
begin
    select MAX(NumberOfUnits) AS 'Largest Quantity', ProductDescription
    from [dbo].[inventoryinfo1_vw]
    where ProductDescription LIKE 'P%'
    group by ProductDescription
    order by ProductDescription
end

我只希望看到以P开头的单元数最多的一行,而是产生两行,如何防止这种情况发生?

上面的代码导致以下结果:

Largest Quantity        ProductDescription
     8                     Pants
    12                     Pants

1 个答案:

答案 0 :(得分:0)

在您的视图中,像这样修改它:

create view [dbo].[inventoryinfo1_vw] as
   select InventoryOrdering.NumberOfUnits, InventoryOrdering.DateOfOrder, TRIM(Product.ProductDescription) AS ProductDescription, Product.ListPrice, Supplier.Name, Supplier.PhoneNumber
-- etc