在SQL中使用随机函数仅用于一个特定列

时间:2016-05-06 16:28:04

标签: sql oracle11g

我有两个问题:

  1. 是否有可能通过仅指定一列来在Oracle中使用dbms_random.random OR dbms_random.value

  2. 如果可以达到以上条件,我可以将出现的随机生成值限制为最多5次,例如?

  3. 我正在使用Oracle 11g :)谢谢。

    free表:

    freeID | lecturerID  | availableID   
      1         1004           10
      2         1004           11
      3         1004           12
      4         1004           13
      5         1005           11
      6         1005           12
      7         1005           13
      8         1005           14
    

    这是我的疑问:

    SELECT DISTINCT e1.FreeID, e1.lecturerID, e1.AVAILABLEID,
                    e2.FREEID, e2.LECTURERID, e2.AVAILABLEID, 
                    s.studentID, s.studentName, s.lecturerID
    FROM       free e1 
    INNER JOIN free e2 
            ON e1.availableID = e2.availableID
    JOIN       student s
            ON s.lecturerID = e1.LECTURERID
           AND e1.lecturerID='1004'
           AND e2.lecturerID='1005'
           AND e1.AVAILABLEID = e2.availableid
    

    根据以上查询,我INNER JOIN free表与availableID一起查找具有相同lecturerID的{​​{1}}。

    然后,我availableID再次使用JOIN表与student

    预期结果:

    lecturerID

    我希望 freeID | e1.lecturerID | e1.availableID | e1.availableID | e2.lecturerID 1 1004 13 13 1005 2 1004 11 11 1005 3 1004 12 12 1005 4 1004 13 13 1005 列在其中随机选择,只要它们都具有相同的值,每个讲师都具有相同的availableID且不超过5次出现次数。如果超过,它将移动到下一个值。

1 个答案:

答案 0 :(得分:2)

您可以使用窗口函数以随机顺序为同一讲授中的每个联接分配行号,然后添加条件,即只应采用第一个:

SELECT *
FROM   (
        SELECT      e1.FreeID,
                    e1.lecturerID,
                    e1.availableID,
                    e2.lecturerID AS lectureID2,
                    s.studentID,
                    s.studentName,
                    ROW_NUMBER() OVER (PARTITION BY e1.lecturerID 
                                       ORDER BY dbms_random.random) AS rn
        FROM        free e1 
        INNER JOIN  free e2 
                ON  e1.availableID = e2.availableID
        INNER JOIN  student s
                ON  s.lecturerID = e1.lecturerID
        WHERE       e1.lecturerID = '1004'
               AND  e2.lecturerID = '1005'
        )
WHERE rn <= 5