HELLO456 2017-11-03 06:05 采纳率: 0%
浏览 788
已结题

根据条件 SQL SERVER 数据模拟

要求:有一个最小值 平均值 最大值 以及数的个数 ,编写一个SQL(函数) 模拟出中间所有的数据,但是最小值和最大值必须出现,以及模拟出的数据的平均值必须满足前面的平均值的要求。

比如: 最小值:300    平均值:350   最大值:400  数值个数为:6个  

结果(只需要满足条件的一种就OK):300(1个) 320(2个) 380(2个) 400(1个) 
  • 写回答

1条回答 默认 最新

  • samzhu 2017-12-20 12:03
    关注

    create view view_rand
    as
    SELECT rand() as rd
    go

    create function f_Rand()
    returns float
    as
    begin
    return (select rd from view_rand)
    end
    GO

    Create FUNCTION RandomNumbers(@Max INT,@Min INT, @Avg INT, @Cnt INT)
    RETURNS @tab table(a INT)
    AS BEGIN
    DECLARE @tmpTable table (id int ,a int)
    DECLARE @remain INT = @avg*@cnt -@Max -@Min*(@Cnt-1)
    IF(@remain <= 0 OR @Cnt <=0)
    return
    DECLARE @i INT = @Cnt -2
    WHILE @i > 0
    BEGIN
    INSERT INTO @tmpTable VALUES (@i,@Min)
    SET @i = @i - 1
    END;

    DECLARE @id int
    WHILE @remain>0 BEGIN
    SET @id =CEILING(dbo.f_Rand()*(@Cnt-2))
    IF @id =0
    SET @i =1
    UPDATE @tmpTable SET a=a+1 WHERE id= @id
    SET @remain=@remain -1
    end
    INSERT INTO @tab values (@Max),(@Min)
    INSERT INTO @tab SELECT a FROM @tmpTable
    return
    END
    GO
    --测试
    SELECT * FROM dbo.RandomNumbers(400,100,240,5)

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘