Случайное распределение записей между двумя таблицами - PullRequest
0 голосов
/ 11 июня 2019

Я хочу присвоить значения из таблицы B в таблицу A, но чтобы каждая запись в таблице B встречалась с одинаковым числом повторений.

enter image description here

Fiddle SQL

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Вы можете использовать оконные функции для этого и мод арифметики.Для простого повторения:

with a as (
      select a.*, rownum as seqnum
      from a
     ),
     b as (
      select b.*, rownum as seqnum, count(*) over () as cnt
      from b
     )
select a.col, b.col
from a join
     b
     on mod(a.seqnum - 1, b.cnt) = b.seqnum - 1;

Для более случайного назначения, рандомизируйте следующие числа:

with a as (
      select a.*,
             row_number() over (order by dbms_random.random) as seqnum
      from a
      order by db
     ),
     b as (
      select b.*, count(*) over () as cnt,
             row_number() over (order by dbms_random.random) as seqnum
      from b
     )
select a.col, b.col
from a join
     b
     on mod(a.seqnum - 1, b.cnt) = b.seqnum - 1;
0 голосов
/ 11 июня 2019

Попробуйте,

with Employees as
 (select Emp, Row_Number() Over(order by 1) Rn
    from B
   cross join (select 1
                from Dual
              connect by level < (select count(1)
                                    from A) / (select count(1)
                                                          from B) + 1)
   order by Dbms_Random.Value),
Colours as
 (select Colour, Rownum Rn
    from A)
select t.Colour, k.Emp
  from Colours t
  join Employees k
    on t.Rn = k.Rn
0 голосов
/ 11 июня 2019

Вы можете использовать ROWNUM для достижения того же:

SELECT
    COLOUR,
    EMP
FROM
    (
        SELECT
            COLOUR,
            ROWNUM RN
        FROM
            T1
    ) T1,
    (
        SELECT
            EMP,
            ROWNUM RN
        FROM
            T2
    ) T2
WHERE
    MOD(T1.RN, 2) + 1 = T2.RN

Fiddler SQL QUERY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...