Sql server 在SQL中执行While循环

Sql server 在SQL中执行While循环,sql-server,tsql,Sql Server,Tsql,我有一张桌子,里面有按程序分配的佣金。我需要能够检索某个月占总佣金80%的项目名称。我不确定我是否在正确的轨道上,是否需要一些帮助。这是我到目前为止所拥有的。不确定如何从#tmp2检索数据以插入#tmp3。或者即使这是正确的方法 Declare @total decimal (20,2) Declare @EOMDate datetime set @EOMDate = '2015-07-31' set @total = (select sum(isnull(commission,0)) *.8

我有一张桌子,里面有按程序分配的佣金。我需要能够检索某个月占总佣金80%的项目名称。我不确定我是否在正确的轨道上,是否需要一些帮助。这是我到目前为止所拥有的。不确定如何从#tmp2检索数据以插入#tmp3。或者即使这是正确的方法

Declare @total decimal (20,2)
Declare @EOMDate datetime

set @EOMDate = '2015-07-31'
set @total = (select sum(isnull(commission,0)) *.80 from factprograms fp 
join dimdealer dd on fp.dimDealerKey = dd.dimDealerKey 
where dd.Location like 'EU%' and fp.EOMDate = @EOMDate)

Create Table #tmp2(
  ID int primary key IDENTITY(1,1) NOT NULL,
  DealerGroupID int,
  DealerGroupName varchar (100),
  Premium decimal (20,2),
  PercentTot decimal (10,5))


insert into #tmp2
select 
DealerGroupID,
Dealergroupname, 
sum(isnull(commission,0)),
sum(isnull(commission,0)/@total)
from factprograms fp 
join dimdealer dd on fp.dimDealerKey = dd.dimDealerKey 
where dd.Location like 'EU%' and fp.EOMDate = @EOMDate
group by dd.DealerGroupID,dd.DealerGroupName
order by sum(commission) desc

select * from #tmp2 order by ID asc

Create table #tmp3(
DealerGroupName varchar(100))




drop table #tmp2,#tmp3

@工程师Dollery-是的,你为什么认为这里需要一个回路?只需编写一个查询来获取所需的数据。不清楚您在寻找什么信息。您是否在#tmp2中查找sum(isnull(commission,0)/@total)值大于0.8的记录?如果是这样的话,这似乎是一个相当琐碎的问题。如果没有,请提供有关数据模式的更多上下文,以及您要查找的具体数据。您需要用更多细节和更清晰的标记重新编写问题。通过获得占每月佣金80%的项目,意味着你在寻找占佣金80%的单一项目?还是一组特定的程序?您还可以提交带有一些示例数据和请求的结果集的表结构。因为您发布的代码计算2015年7月的80%值标记。然后按组计算佣金。团队和项目之间的关系是什么?我需要占该月佣金80%的项目组。如果我循环,直到#tmp2中的记录(按佣金降序排列)总数为1或以上(基于合计百分比字段),这将为我提供所需的组。但这是最好的方式吗?