Я делаю некоторые предположения здесь, но если у вас есть такая таблица
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