22,209
社区成员
发帖
与我相关
我的任务
分享
业务员销售业绩排名:
//按制单人员的制单金额进行汇总排名
有如下结构的表
Create table BillUnion
(
MakeTime DateTime,/*制单时间*/
ActionType varchar(20),/*活动类型*/
BillType varchar(10),/*单据大类型*/
SmallType varchar(50),/*单据小类型*/
BillID varchar(20),/*单据号*/
TotalMoney float, /*单据金额*/
OrganizationID int,/*公司代码*/
EmployeePP varchar(20)/*制单人*/
)
为了便于大家测试,我插入几个记录:
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010101',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010102',150,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','付款','经营活动','商品销售','SPCG2008010101',200,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','商品销售','SPCG2008010201',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','收款','经营活动','商品销售','SPXS2008010201',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','费用报销','FYBX2008010201',50,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','SPCG2008010301',150,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','收款','经营活动','费用报销','SPXS2008010301',500,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010301',150,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','付款','经营活动','商品采购','SPCG2008010401',100,1,'小王')
select * from BillUnion
drop table BillUnion
用下面的sql语句查询得到销售业绩由高到低,但我还想得到排名。
select top 100 percent EmployeePP,sum(totalmoney)as summoney,max(MakeTime)as maxtime from BillUnion group by EmployeePP order by sum(totalmoney) desc,max(MakeTime)
select EmployeePP,summoney,row_num from (
select top 100 percent EmployeePP,sum(totalmoney)as summoney,max(MakeTime)as maxtime,row_number() over(order by sum(totalmoney)desc,max(MakeTime) ) as row_num from BillUnion group by EmployeePP order by sum(totalmoney) desc,max(MakeTime)
)T
,但我想得到2000下的sql语句,希望高人指点。解决的办法:
select identity(int,1,1) as ID,b.* into #Temp from (select top 100 percent EmployeePP,sum(totalmoney)as summoney,max(MakeTime)as maxtime from BillUnion
group by EmployeePP order by sum(totalmoney) desc,max(MakeTime))b
select * from #Temp
Create table BillUnion
(
MakeTime DateTime,/*制单时间*/
ActionType varchar(20),/*活动类型*/
BillType varchar(10),/*单据大类型*/
SmallType varchar(50),/*单据小类型*/
BillID varchar(20),/*单据号*/
TotalMoney float, /*单据金额*/
OrganizationID int,/*公司代码*/
EmployeePP varchar(20)/*制单人*/
)
--为了便于大家测试,我插入几个记录:
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010101',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','收款','经营活动','商品销售','SPXS2008010102',150,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-1','付款','经营活动','商品销售','SPCG2008010101',200,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','商品销售','SPCG2008010201',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','收款','经营活动','商品销售','SPXS2008010201',100,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-2','付款','经营活动','费用报销','FYBX2008010201',50,1,'小强')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','SPCG2008010301',150,1,'小王')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','收款','经营活动','费用报销','SPXS2008010301',500,1,'小刘')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010301',150,1,'小强')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-4','付款','经营活动','商品采购','SPCG2008010401',100,1,'小强')
Insert into BillUnion(MakeTime, ActionType, BillType, SmallType, BillID, TotalMoney, OrganizationID, EmployeePP)
Values('2008-1-3','付款','经营活动','费用报销','FYBX2008010305',200,1,'小强')
select EmployeePP,summoney,rownum=(select count(*)+1 from (
select EmployeePP,sum(totalmoney) as summoney,max(maketime) as maxtime from billunion group by employeepp
)b where summoney>t.summoney or (summoney=t.summoney and maxtime<t.maxtime)) from (
select EmployeePP,sum(totalmoney) as summoney,max(maketime) as maxtime from billunion group by employeepp
)T
order by rownum
--select EmployeePP,summoney,row_num from (
--select top 100 percent EmployeePP,sum(totalmoney)as summoney,max(MakeTime)as maxtime,row_number() over(order by sum(totalmoney)desc,max(MakeTime) ) as row_num from BillUnion group by EmployeePP order by sum(totalmoney) desc,max(MakeTime)
--)T
go
drop table BillUnion
/*
EmployeePP summoney rownum
-------------------- ---------------------- -----------
小刘 800 1
小王 500 2
小强 500 3
*/
SELECT
EmployeePP,
金额,
单据小类型,
时间,
排名=(SELECT COUNT(*)+1
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型,
MakeTime AS 时间
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType,
MakeTime
) AS t
WHERE 金额>a.金额
OR (金额=a.金额
AND 时间<a.时间)
)
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型,
MakeTime AS 时间
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType,
MakeTime
) AS a
SELECT
EmployeePP,
金额,
单据小类型,
时间,
排名=(SELECT COUNT(*)+1
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型,
MakeTime AS 时间
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType,
MakeTime
) AS t
WHERE 金额>a.金额
OR (金额>a.金额
AND 时间<a.时间)
)
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型,
MakeTime AS 时间
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType,
MakeTime
) AS a
WHERE 金额>a.金额
OR (金额>a.金额
AND 时间<a.时间)
SELECT
EmployeePP,
金额,
单据小类型,
排名=(SELECT COUNT(*)+1
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType
) AS t
WHERE 金额>a.金额
)
FROM(
SELECT
EmployeePP,
SUM(TotalMoney) AS 金额,
SmallType AS 单据小类型
FROM BillUnion
WHERE SmallType='商品销售'
GROUP BY
EmployeePP,
SmallType
) AS a