Database 帮助完成一个游标

Database 帮助完成一个游标,database,cursors,Database,Cursors,我正在研究游标。我想创建一个光标来显示每个客户的信息以及他购买的更多的产品。为此,我编写了以下游标: declare myCursor cursor for select Customers.CustomerID, Customers.ContactName, Products.ProductName, SUM(Quantity) as Total from Customers inner join Orders on Customers.CustomerID = Orders.Custo

我正在研究游标。我想创建一个光标来显示每个客户的信息以及他购买的更多的产品。为此,我编写了以下游标:

declare myCursor cursor
 for select Customers.CustomerID, Customers.ContactName, Products.ProductName, SUM(Quantity) as Total
  from Customers inner join Orders on Customers.CustomerID = Orders.CustomerID
 inner join( [Order Details] inner join Products on [Order Details].ProductID = Products.ProductID)
 on Orders.OrderID = [Order Details].OrderID
 group by Customers.CustomerID, Customers.ContactName, Products.ProductName
 --
 declare @CustomerID nchar(10), @ContactName nvarchar(30), @ProductName nvarchar(4), @Total int
 open myCursor
 fetch next from myCursor into @CustomerID, @ContactName , @ProductName, @Total
 while @@FETCH_STATUS = 0
     begin

     begin
          print @CustomerID+' '+@ContactName+' '+@ProductName+' '+CAST(@Total as varchar)
          fetch next from myCursor into @CustomerID, @ContactName , @ProductName, @Total
     end
     end

现在它显示每个客户购买每个产品的次数。现在,我想使用IN、CONTAIN或EXISTS等条件关键字来完成我的光标,以显示每个客户购买了更多的产品。但我不知道该怎么做。您能帮助我吗?

如果我理解正确,您希望展示每位客户购买最多的产品。使用游标,您可以首先声明一个表变量,如

declare @customersprocessed table
(
  @CustomerID
)
然后,您需要按
SUM(Quantity)DESC
对光标进行排序,以便顶部的项目上升到顶部

最后,您需要修改查询的内部部分,以便仅在表中不存在客户id时打印,然后将customerid添加到表中,这样就不会再次打印

 begin
      if ((select count(1) from @customersprocessed where CustomerID = @CustomerID) = 0)
      begin
         print @CustomerID+' '+@ContactName+' '+@ProductName+' '+CAST(@Total as varchar)
      end
      else
      begin
         insert into @customersprocessed select @CustomerID
      end

      fetch next from myCursor into @CustomerID, @ContactName , @ProductName, @Total
 end

当然,这是假设您希望保留光标。还有其他方法可以通过选择您想要显示的所有客户和返回购买量最大的产品的子查询来实现

为什么要使用游标来执行此操作?