sqlserver中根据表中的配置概率取到数据
create proc pr_zhanglei_test1
/*功能描述:
根据t_zhanglei_test1中perc设置的概率,取到相应数据old_id
*/
as
declare @percent_total int,
@max_id int,
@min_id int create table #t_zhanglei_temp --临时表存储变化表t_zhanglei_test1中total>0的数据
(id int identity(1,1) not null,
old_id int not null,
name varchar(50) not null,
total int not null,
perc int not null) insert into #t_zhanglei_temp(old_id,name,total,perc)
select id,name,total,perc
from t_zhanglei_test1
where total>0; if exists(select count(1) from #t_zhanglei_temp)
begin
declare @perc_temp int
select @max_id=max(id),@min_id=min(id),@percent_total=sum(perc)
from #t_zhanglei_temp create table #zhanglei_temp( --存储变化权值区间
id int not null,
old_id int not null,
start_num int not null,
end_num int not null
) insert into #zhanglei_temp(id,old_id,start_num,end_num)
select @min_id,old_id,1,perc
from #t_zhanglei_temp
where id=@min_id; declare @id int
declare @max_end_num int,
@old_id int
while @min_id<@max_id
begin set @min_id=@min_id+1; select @perc_temp =perc,@old_id=old_id
from #t_zhanglei_temp
where id=@min_id; select @max_end_num=max(end_num)
from #zhanglei_temp insert into #zhanglei_temp(id,old_id,start_num,end_num)
select @min_id,@old_id,@max_end_num+1,@max_end_num+@perc_temp; end declare @max_random int,
@random_temp int,
@return_id int
select @max_random=end_num
from #zhanglei_temp; set @random_temp=cast(ceiling(rand() * @max_random) as int); select @return_id=old_id
from #zhanglei_temp
where @random_temp
between start_num and end_num update t_total set total=total+1 where id=@return_id; if @@rowcount=0
begin
insert into t_total(id,total) values(@return_id,1);
end end --相关表结构 CREATE TABLE [t_zhanglei_test1] (
[id] [int] NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[total] [int] NOT NULL ,
[perc] [int] NOT NULL --本调数据出现的概率
) ON [PRIMARY]
GO --插入测试数据
insert into t_zhanglei_test1
select 111,'测试一',8,10
union all
select 222,'测试二',8,20
union all
select 333,'测试三',8,70 GO CREATE TABLE [t_total] (
[id] [int] NOT NULL ,
[total] [bigint] NOT NULL
) ON [PRIMARY]
GO -- 调取存储
declare @i int
set @i=0
while @i<10000
begin
exec pr_zhanglei_test1 set @i=@i+1
end --查看效果
select * from t_total
sqlserver中根据表中的配置概率取到数据的更多相关文章
- 在SQL SERVER中获取表中的第二条数据
在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...
- 查看hive中某个表中的数据、表结构及所在路径
查看hive中action_data_myisam表中的数据.表结构及所在路径 1.客户端进入hive环境:hive 2.查看表数据,鉴于数据量大,这里只显示前五条:select * from act ...
- 备忘:MySQL中修改表中某列的数据类型、删除外键约束
-- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...
- SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份
SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...
- C#中去掉表中重复的数据
/// <summary> /// 去掉表中重复的数据 int /// </summary> /// <param name="SourceTable&quo ...
- sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)
我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与d ...
- mysql中在表中insert数据时,有重复主键id时,变成update
MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法 例如: id name sex age 1 kathy male 23 2 Javer f ...
- MySQL 数据库中用户表中口令登陆设置
工具:MyEclipse8.5.apache-tomcat-6.0.43.MySQL5.6 问题:项目是同事发给我,正常运行之后,使用MySQL表里的管理员数据登陆时,提示“仅限于非总部工号登录!” ...
- pl/sql中误删表中数据并提交恢复办法
最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...
随机推荐
- ABP框架 - 实体
文档目录 本节内容: 实体类 聚合根类 领域事件 约定的接口 审计 软删除 活跃/消极 实体 实体变化事件 IEntity 接口 实体是DDD一个核心的概念.Eric Evans是这么描述的:“一个对 ...
- iOS---观察者模式之--->KVO
文章结构如下: Why? (为什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) More (更多细节) 原理 自己实现KVO 在我的上一篇文章浅谈 iOS Notifica ...
- cmder添加右键菜单
http://www.jianshu.com/p/b691b48bcee3 就这么简单 Cmder.exe /REGISTER ALL
- div中设置滚动条的问题
<div srtle="width:100px;height:50px;"></div> 这样的一个div,当文本超出的时候我们就会设: overflow: ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
- 多线程同步工具——LockSupport
用例1:子线程等待主线程发放许可! public static void main(String[] args) { Thread thread = new Thread(){ public void ...
- 分布式系统理论基础 - 一致性、2PC和3PC
引言 狭义的分布式系统指由网络连接的计算机系统,每个节点独立地承担计算或存储任务,节点间通过网络协同工作.广义的分布式系统是一个相对的概念,正如Leslie Lamport所说[1]: What is ...
- 微信小程序定时器组件(输入时间字符串即可倒计时)
昨天写了代码,今天发现要重用,干脆就抽出来做个组件得了,顺便还改善了一下代码通用性. 昨天的代码在这里 github下载地址 用法: 引入: var timer = require('../../pl ...
- Unity3D中使用委托和事件
前言: 本来早就想写写和代码设计相关的东西了,以前做2DX的时候就有过写写观察者设计模式的想法,但是实践不多.现在转到U3D的怀抱中,倒是接触了不少委托事件的写法,那干脆就在此总结一下吧. 1.C#中 ...
- CSS知识总结(一)
一.认识CSS 1.什么是CSS? CSS (Cascading Style Sheet) 层叠样式表 是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 由于CSS属性或规则尚未成为 ...