sql创建一个表变量,并循环表,更新有一个字段



USE [ZCJ20_DB]
GO
/****** Object:  StoredProcedure [dbo].[a_Set_PlatformRank]    Script Date: 07/27/2016 17:22:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
Desc:设置平台导航排序比重值(统计:平台初始化权重;平台项目数;平台资讯数;平台评论数;平台信息;平台评分;)六项总和所占百分比
Email:1225648393@qq.com
Author:LHB
UpdateDate:2016-07-27 14:45:56.570
QQ:1225648393
*/
ALTER PROCEDURE [dbo].[a_Set_PlatformRank]
AS
DECLARE @PlatformID UNIQUEIDENTIFIER --平台ID
DECLARE @BusinessStatus  INT         --平台运营状态(运营中(1); 已下线(2);已转型(3);)
DECLARE @UserID INT --用户ID  
DECLARE @INITRank INT --1.初始化权重 
DECLARE @YunkuNum INT --2.平台项目总数
DECLARE @CommentNum INT --3.平台评论总数
DECLARE @InfoNum INT --4.平台资讯总数
DECLARE @PlantFileds INT --5.平台信息
DECLARE @Scores INT --6.平台评分                      
DECLARE @PlatformRank DECIMAL(4,3)  --所占(各个权重)百分比


DECLARE @MaxYunkuNum INT --所有平台中最大项目总数
DECLARE @MaxCommentNum INT --所有平台中最大项目总数
DECLARE @MaxInfoNum INT --所有平台中最大项目总数

-- 声明平台信息字段
DECLARE @IPC NVARCHAR(MAX)--平台ICP备案号
DECLARE @Scale NVARCHAR(MAX)--公司规模
DECLARE @ServiceQQ NVARCHAR(MAX)--在线客服
DECLARE @CredentialsImgs NVARCHAR(200)--公司证件照
DECLARE @ConditionImgs NVARCHAR(200)--办公环境照
--各个比重所占百分比
DECLARE @INITRankPercent DECIMAL(4,3);
DECLARE @YunkuNumPercent DECIMAL(4,3)
DECLARE @CommentNumPercent DECIMAL(4,3)
DECLARE @InfoNumPercent DECIMAL(4,3)
DECLARE @PlantFiledsPercent DECIMAL(4,3)
DECLARE @ScoresPercent DECIMAL(4,3)


--声明【平台】表变量
DECLARE  @tempplatform TABLE    
  (   
     [PlatformID] UNIQUEIDENTIFIER, 
     [BusinessStatus] INT,
     [INITRank] INT,
     [YunkuNum] INT,
     [CommentNum] INT ,
     [IPC] NVARCHAR(MAX),--平台ICP备案号
     [Scale] NVARCHAR(MAX),--公司规模
     [ServiceQQ] NVARCHAR(MAX),--在线客服
[CredentialsImgs] NVARCHAR(200),--公司证件照
[ConditionImgs] NVARCHAR(200)--办公环境照
   ) 
--将源表中的数据插入到变量【平台】表
INSERT @tempplatform 
SELECT  app.PlatformID,
app.BusinessStatus,
app.INITRank,
app.YunkuNum,
app.CommentNum,
app.IPC, --平台ICP备案号
app.Scale, --公司规模
app.ServiceQQ,  --在线客服
(SELECT TOP 1 ami.ImgUrl FROM a_mst_Images AS ami WHERE ami.RefID=app.PlatformID AND ami.ImgType=1) AS  CredentialsImgs  ,  --CredentialsImgs 公司证件照
(SELECT TOP 1 ami.ImgUrl FROM a_mst_Images AS ami WHERE ami.RefID=app.PlatformID AND ami.ImgType=2) AS ConditionImgs --ConditionImgs 办公环境照
     from a_pro_platform app WITH (NOLOCK);


--获取平台最大项目数量/平台最大的评论数量
SELECT  @MaxYunkuNum=MAX(tapp.YunkuNum),@MaxCommentNum=MAX(tapp.CommentNum)
FROM @tempplatform AS tapp 
--获取平台中最大平台资讯总数
SELECT TOP 1 @MaxInfoNum=COUNT(1) 
FROM a_inf_InfoContent AS aiic WITH (NOLOCK) GROUP  BY aiic.BelongToUserID 
ORDER BY COUNT(aiic.BelongToUserID) DESC


--循环【平台】临时表
WHILE EXISTS(SELECT [PlatformID] FROM @tempplatform)
BEGIN 
SET ROWCOUNT 1
--获取【平台在线状态;平台初始化权重;平台项目数;平台评论数;】
SELECT @PlatformID=tapp.PlatformID,
@BusinessStatus=tapp.BusinessStatus,
@INITRank=tapp.INITRank,
@YunkuNum=tapp.YunkuNum,
@CommentNum=tapp.CommentNum ,
@IPC=tapp.IPC,
@Scale=tapp.Scale,
@ServiceQQ=tapp.ServiceQQ,
@CredentialsImgs=tapp.CredentialsImgs,
@ConditionImgs=tapp.ConditionImgs
FROM @tempplatform AS tapp 


--判断平台运营状态(运营中(1); 已下线(2);已转型(3))
IF (@BusinessStatus=2)--如果平台下线,修改“所占(各个权重)总百分比 【PlatformRank= -1】
BEGIN
UPDATE a_pro_platform SET PlatformRank=-1 WHERE PlatformID=@PlatformID
END
ELSE
BEGIN
--统计计算所占(各个权重)百分比
/*Summary:各项所占比重大小概况
 1.初始权重(数据部):40%
 2.项目数:15%
 3.资讯数:15%
 4.评论数:10%
 5.平台信息:10%
 6.评分:10%*/
SET @INITRankPercent=0;--初始权重百分比=(初始化权重值/最大初始化权重值)*40%
SET @YunkuNumPercent=0;--项目数百分比=(项目数量/项目最大数量)*15%
SET @InfoNumPercent=0;--资讯数百分比=(资讯数量/资讯最大数量)*15%
SET @CommentNumPercent=0;--评论数百分比=(评论数量/评论最大数量)*10%
SET @PlantFiledsPercent=0;--平台信息百分比=(选填字段数量/选择字段总数(5))*10%
SET @ScoresPercent=0;--评分百分比=(平方分数/总分数15)*10%
SET @PlatformRank=0;/*--平台(各项总和)百分比=@INITRankPercent
+@YunkuNumPercent
+@CommentNumPercent
+@InfoNumPercent
+@PlantFiledsPercent
+@ScoresPercent*/
--获取平台的用户ID
SELECT @UserID=auue.uid 
 FROM a_usr_UserExpand AS auue WITH (NOLOCK) 
WHERE auue.PlatformId=@PlatformID

--【1】.获取平台初始化权重值(1~100)
----------------------平台初始化权重所占百分比(数据部提供)
--获取平台用户的平台资讯总数
SET  @INITRankPercent=CASE WHEN ISNULL(@INITRank,0)=0 THEN 0 ELSE  (@INITRank/100)*0.4 END;--(40%比重)


--【2】.获取平台项目总数(项目总数/所有平台中最大项目总数)
--项目数百分比=(项目数量/项目最大数量)*15%
SET  @YunkuNumPercent=CASE WHEN ISNULL(@YunkuNum,0)=0 THEN 0 ELSE  (@YunkuNum/@MaxYunkuNum)*0.15 END;--(15%比重)


--【3】.获取平台资讯总数
--获取平台用户的平台资讯总数
SELECT @InfoNum=COUNT(1) FROM a_inf_InfoContent AS aiic WITH (NOLOCK) WHERE 1=1 AND aiic.BelongToUserID=@UserID
----------------------平台资讯所占百分比
--评论数百分比=(评论数量/评论最大数量)*10%
SET  @InfoNumPercent=CASE WHEN ISNULL(@InfoNum,0)=0 THEN 0 ELSE  (@InfoNum/@MaxInfoNum)*0.15 END;--(15%比重)

--【4】.获取平台评论总数(评论总数/所有平台中最大评论总数)
----------------------平台评论所占百分比
--评论数百分比=(评论数量/评论最大数量)*10%
SET  @CommentNumPercent=CASE WHEN ISNULL(@CommentNum,0)=0 THEN 0 ELSE  (@CommentNum/@MaxCommentNum)*0.1 END;--(10%比重)

--【5】.获取平台信息百分比
---------统计平台信息(选填字段:目前五个)不为空的个数
SET  @PlantFileds=0;


--平台ICP备案号
SET  @PlantFileds=CASE WHEN ISNULL(@IPC,'')=''THEN 0 ELSE  @PlantFileds +1 END;
--公司规模
SET  @PlantFileds=CASE WHEN ISNULL(@Scale,'')=''THEN 0 ELSE  @PlantFileds +1 END;
--在线客服
SET  @PlantFileds=CASE WHEN ISNULL(@ServiceQQ,'')=''THEN 0 ELSE  @PlantFileds +1 END;
--公司证件照
SET  @PlantFileds=CASE WHEN ISNULL(@CredentialsImgs,'')=''THEN 0 ELSE  @PlantFileds +1 END;
--办公环境照
SET  @PlantFileds=CASE WHEN ISNULL(@ConditionImgs,'')=''THEN 0 ELSE  @PlantFileds +1 END;

----------------平台信息所占百分比
----平台信息百分比=(选填字段数量/选择字段总数5)*10%
SET @PlantFiledsPercent = CASE WHEN ISNULL(@PlantFileds,0)=0 THEN 0 ELSE (@PlantFileds/5)*0.1 END ;--(10%比重)

--【6】.获取评分百分比(0~15分)
--获取并统计评分总数
SELECT  @Scores=SUM(CASE WHEN pfr.CommentRuleValue IS NULL THEN 0 ELSE pfr.CommentRuleValue END)
 FROM a_cache_PlatformCommentRankPush AS pfr WITH (NOLOCK)
WHERE pfr.PlatformID = @PlatformID 
----------------平台评分所占百分比
--评分百分比=(平方分数/总分数15)*10%
SET @ScoresPercent= CASE WHEN ISNULL(@Scores,0)=0 THEN 0 ELSE (@Scores/15)*0.1 END;--(10%比重)

--【7】.统计所占(各个权重相加)总百分比
SET @PlatformRank=@INITRankPercent+@YunkuNumPercent+@CommentNumPercent+@InfoNumPercent+@PlantFiledsPercent+@ScoresPercent


--更新平台表中【统计所占(各个权重相加)百分比】字段
UPDATE a_pro_platform SET PlatformRank=@PlatformRank WHERE PlatformID=@PlatformID 
END

SET ROWCOUNT 0
--删除临时表中的使用完的数据
DELETE  from @tempplatform where [PlatformID] = @PlatformID

END  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值