Произвольно выбрать записи, чтобы создать ограниченную запись - PullRequest
0 голосов
/ 25 декабря 2010

В базе данных Microsoft Access, содержащей 500 сотрудников разных категорий, мне нужно только определенное количество сотрудников в каждой категории.например, 2 сотрудника категории A, 5 сотрудников категории B, 8 сотрудников категории C.

Таким образом, я хочу создать 10 отдельных групп, в которых каждый человек должен быть найден только в одном списке, т.е.дубликат записи.Каждый отчет должен содержать случайно выбранную уникальную запись.Один сотрудник в одном списке должен быть найден в другом списке.

Пожалуйста, помогите, объяснив, как достичь?Я попытался создать объединение запроса.Но я получил результат только дубликатов.Я также попробовал случайное предельное выражение, но безрезультатно.Предпочтительно группировка должна основываться на выделенном центре.

База данных выглядит следующим образом: -

Employee Name  Category  Duty As     Centre allotted 
1. XXXXX          A         I              1
2. XXXXX          A         I              1
3. XXXXX          B         II             1
4. XXXXX          B         II             1
5. XXXXX          B         II             1
6. XXXXX          C         III            1  
7. XXXXX          C         III            1  
8. XXXXX          C         III            1  
9. XXXXX          C         III            1  

Как мне это сделать, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2010

Один из подходов для этого - добавить в таблицу сотрудников поле с именем flag с типом данных yes / no.Затем создайте форму со следующими элементами управления:

Командная кнопка с заголовком флага сброса для no для всех записей

Поле со списком, в котором перечислены все различные категории

Текстовое поле для хранения количества записей для выбора

Еще одна командная кнопка с заголовком записи флага

Тогда код VBA события click будет выглядеть примерно так:

    Private Sub cmdFlagRecords_Click()
    Dim lngRandomNumber As Long
    Dim k As Long
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    strSQLText = "Select * From Employees Where Category='" & Me.cboCategory & "'"
    Set rs = db.OpenRecordset(strSQLText, dbOpenSnapshot)
    k = 0
    Do Until k = CLng(Me.txtRecordsToSelect)
        ' generate a random number between one and the number of rows available
         lngRandomNumber = CLng(Rnd(1) * rs.RecordCount)
         'move to that record
         rs.AbsolutePosition = lngRandomNumber
         If Not rs![flag] Then
             ' set the flag to yes or true and increment the k variable
             db.Execute "Update Employees Set=True Where ID=" & rs![ID]
             k = k + 1
         End If
    Loop
    rs.Close

End Sub

Затем вы можете нажимать кнопку столько раз, сколько необходимо для создания вашего выбора.

0 голосов
/ 25 декабря 2010

Хотелось бы что-нибудь подобного костюма?

SELECT p.ID, p.EmpName, p.Category
FROM Persons P
WHERE p.ID In (
    SELECT Top 2 ID 
    FROM Persons 
    WHERE Category = "A" 
    ORDER BY Rnd(ID)+ID) 
OR p.ID In (
    SELECT Top 5 ID 
    FROM Persons 
    WHERE Category = "B" 
    ORDER BY Rnd(ID)+ID) 
OR p.ID In (
    SELECT Top 8 ID 
    FROM Persons 
    WHERE Category = "C" 
    ORDER BY Rnd(ID)+ID)
ORDER BY p.Category
...