我在这里做了一些假设,但如果你有这样的桌子
If object_id('Sales') is not null
Drop table Sales
CREATE TABLE [dbo].[Sales]
(
[Salesperson] [nvarchar](50) NULL,
[Sales] [int] NULL,
[Gross] [money] NULL,
[Profit] [money] NULL,
)
像这样填充数据
Insert into Sales values ('John Doe', 100, 200.00, 100.00)
Insert into Sales values ('John Doe', 125, 300.00, 100.00)
Insert into Sales values ('Jane Smith', 100, 200.00, 100.00)
Insert into Sales values ('Jane Smith', 125, 1.00, 0.50)
Insert into Sales values ('Joel Spolsky', 100, 2.00, 1.00)
Insert into Sales values ('Joel Spolsky', 125, 3.00, 1.00)
然后像这样的存储过程可能会给你你正在寻找的东西
If object_id('usp_SalesReport') is not null
Drop procedure usp_SalesReport
Go
Create Procedure usp_SalesReport
as
Declare @results as table
(
SalesPerson nvarchar(50),
Sales int,
Gross money,
Profit money
)
Declare @SalesPerson nvarchar(50)
Declare SalesSums CURSOR FOR
Select distinct SalesPerson from Sales
Open SalesSums
Fetch SalesSums INTO @SalesPerson
While @@Fetch_Status = 0
Begin
Insert into @results Select Sales.Salesperson, sum(sales), sum(Gross), sum(profit) from Sales group by Sales.Salesperson having Sales.Salesperson = @SalesPerson
Insert into @results Select 'EveryoneElse', avg(sales), avg(Gross), avg(profit) from Sales where Salesperson <> @SalesPerson
Fetch SalesSums INTO @SalesPerson
End
Select * from @results
Close SalesSums
Deallocate SalesSums
Return