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的效果,不知道查询语句如何写求高手指教

...全文
325 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
等楼下回答~

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧