MSSQL 如何按权重列进行排序查询

bakdfkuk 2015-07-27 02:40:48
现有表及数据如下:

CREATE TABLE [AD](
[ADID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,--ID
[ADName] [nvarchar](200) NULL,--名称
[ADFrequncy] [int] NULL --频率
CONSTRAINT [PK_AD] PRIMARY KEY CLUSTERED
(
[ADID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

insert into ad values ('测试1',10);
insert into ad values ('测试2',5);
insert into ad values ('测试3',3);
insert into ad values ('测试4',2);


现每次往表中查询出来一条,但是需要按[ADFrequncy]权重列来排序取,希望达到效果:总共取20次,能有10次测试1,5次测试2,3次测试3,2次测试4的效果,不知道查询语句如何写求高手指教

...全文
205 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Haytor 2015-07-27
可以参考下面这个设计,查询的次数越多,越接近设置的百分比。 DECLARE @iRAND INT SET @iRAND = CAST((RAND()*20+1) AS INT ) ;WITH [AD]([ADName],[ADFrequncy],Min,Max) AS( SELECT '测试1',10,1,10 UNION --50% SELECT '测试2',5,11,15 UNION --25% SELECT '测试3',3,16,18 UNION --15% SELECT '测试4',2,19,20 --10% ) SELECT @iRAND AS Nums,* FROM AD WHERE @iRAND BETWEEN AD.Min AND AD.Max
回复
zbdzjx 2015-07-27
没看太懂。 是指对ad这个表执行一个SQL语句,返回20条记录,权重按ad表中设定的显示?还是说执行类似于select top 1 * from ad这样的语句20次,返回的20个结果按ad表中设定的权重显示?
回复
hery2002 2015-07-27
等楼下回答~
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-07-27 02:40
社区公告
暂无公告