Как обновить и заполнить пустые поля в таблице A значениями из B со случайной последовательностью - PullRequest
0 голосов
/ 22 июня 2019

Я столкнулся с огромной проблемой! Я сотрудник полиции в центральном полицейском управлении в Афинах, Греция, и я пытаюсь создать базу данных, которая будет автоматически создавать графики работы примерно для 200-300 полицейских каждый день. Я создал 3 таблицы:
A) Таблица, содержащая всю информацию о 300 офицерах с их ID (в качестве первичного ключа, который связан с | таблицей C ") и другую информацию, такую ​​как адрес, когда они были переданы нам и т. Д. Назовите ее" Таблица A "
Б) Стол со всеми возможными местами, которые могут понадобиться офицерам. Например, запись в столбце A [NOT THE HEADER]: «Полицейские патрули», столбец B: «количество людей, которых мы отправим в эту службу», для которых я создал запрос (с таблицей подсчета, чтобы он мог повторять столько записей как я хочу, например, если мне нужно 30 человек для патрулирования, он создаст 30 уникальных записей этой службы в таблице C, а также я установил ввод для даты, чтобы он мог автоматически вводить дату в таблицу C.
C) Таблица C: Здесь у меня есть информация, такая как все службы, которые были созданы запросом с рабочим временем, а также столбец идентификатора сотрудника, который будет назначен на конкретное место.

Теперь я застрял, пытаясь обновить со случайной последовательностью таблицу C, в частности столбец идентификационного номера, с помощью столбца идентификационного номера всех сотрудников полиции из таблицы А. (Я не дошел до случайной части только тем не менее, каждый раз, когда я обновляю Таблицу C, он получает только идентификатор из первой записи из Таблицы A, игнорируя все остальные записи, поэтому он помещает один и тот же номер идентификатора в 30 необходимых мне мест и не показывает все записи из Таблица А)

WHERE (((TableC.DateofDuty)=[Date]));

Я попробовал это безуспешно, поскольку для каждой записи в таблице C он получает тот же идентификатор из таблицы A.

Также я попробовал это:

UPDATE TableC LEFT OUTER JOIN TableA ON TableC.ID= TableA.ID
 SET TableC.ID = TableA.ID
WHERE (((TableC.DateofDuty)=[Date]));
UPDATE TableC SET TableC.ID= TableA.ID
WHERE (((TableC.DateofDuty)=[Date]));

или

UPDATE TableC LEFT OUTER JOIN TableA ON TableC.ID= TableA.ID
 SET TableC.ID = TableA.ID
WHERE (((TableC.DateofDuty)=[Date]));

В первой строке кода обновляются все записи, которые я хотел обновить, но с тем же идентификатором. Во второй записи он спрашивает, хочу ли я заполнить конкретную, скажем, 100, места, которые я хочу, я нажимаю да, и идентификатор не обновляется.

Я тоже попробовал Inner Join без удачи

Я бы очень признателен за вашу помощь

Редактировать: я только что заметил, что мое сообщение было помечено как недостаточное, поэтому я добавлю еще детали

Это таблица должна быть заполнена / обновлена: ТАБЛИЦА С

 Service Duty      Date              ID
ΜΕΤΑΓΩΓΕΣ        24/06/2019 
ΜΕΤΑΓΩΓΕΣ        24/06/2019 
ΜΕΤΑΓΩΓΕΣ        24/06/2019 

Из таблицы A

 (Primary ID)   Police Rank
250311           ΤΑΞΙΑΡΧΟΣ
288066           ΑΡΧΙΦΥΛΑΚΑΣ
288076           ΑΣΤΥΦΥΛΑΚΑΣ

До сих пор я использовал следующий код

UPDATE [TABLE C] INNER JOIN [TABLE A] ON  [[TABLE C].ID =  [TABLE A].ID
SET [TABLE C].ID= [TABLE A].ID
WHERE ((([TABLE A].DATE)=[INPUT DATE]));

Что обновляет 0 строк, хотя я ввожу правильную дату на входе (24/06/2019) Я даже поставил 01.01.2009 просто чтобы убедиться, что это не вход, вызывающий проблему

Вторая попытка:

UPDATE [TABLE C] Left JOIN [TABLE A] ON  [[TABLE C].ID =  [TABLE A].ID
SET [TABLE C].ID= [TABLE A].ID
WHERE ((([TABLE A].DATE)=[INPUT DATE]));

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

Третья попытка

UPDATE [TABLE C] Right JOIN [TABLE A] ON  [[TABLE C].ID =  [TABLE A].ID
SET [TABLE C].ID= [TABLE A].ID
WHERE ((([TABLE A].DATE)=[INPUT DATE]));

Но он возвращает 0 записей ...

4-я попытка У меня есть только ТАБЛИЦА C

UPDATE [TABLE C] SET [TABLE C].ID= "Random Text"
WHERE ((([TABLE C].Date)=[input date]));

Который обновляет идентификатор даты, которую я вставил во входные данные, до «Случайного текста» Но как только я возвращаю Таблицу A обратно в игру, она возвращает 0 значений

Я буду продолжать пытаться, пока я это выясню. Я уверен, что это должно быть что-то действительно глупое, что я упускаю.

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Так что я вроде понял это Позвольте мне очень быстро сделать резюме У нас есть:

TABLEA
ID      | POLICE RANK | FULL NAME   |
____________________________________
288066  |  Const.     | Chris Meli  |
273111  |  Serg.      | John  Do    |
231444  |  Const.     | Bill  Park  |
298432  |  Const.     | Joe   Park  |
_____________________________________

, который содержит информацию о сотрудниках полиции и связан с полем ID в TableC , поэтому даже из соединения в TableA вы можете проверить обязанности, которые были назначены каждому сотруднику предыдущие дни.

TABLEB

DUTY    | Number of Police needed   |
        | for each service          |
____________________________________
Patrol  |             1             |
Guards  |             1             |
Courts  |             2             |
____________________________________

Я поставил цифры 1 и 2 ради простоты. Обычно TableA будет содержать более 250 человек , а на TableB будет много Обязанности , и количество необходимой полиции будет варьироваться в зависимости от дата и многие другие факторы.

TABLEC
ID      | DUTY        | DATE        |
____________________________________
        |             |             |
        |             |             |
        |             |             |
        |             |             |
_____________________________________

Таблица C будет заполнена из таблиц A (ID), TableB (Duty) и введена дата для даты, которую я планирую с помощью следующего добавляемого запроса

INSERT INTO TABLEC ( DUTY, DATE, ID )
SELECT TABLEB.DUTY, [INPUT DATE], TABLEA.ID
FROM TABLEA, TABLEB INNER JOIN n ON n.n <= TABLEB.[Number of Police needed for each service];

(n - это таблица чисел, а n.n - это столбец, в котором примерно 10000 чисел, поэтому не обращайте на это внимания) Теперь добавляющий запрос возвращает мне результаты, которые мне нужны, но в результате получается, что умножает нужную позицию на ID офицера. Так что вместо этого:

TABLEC
ID      | DUTY        | DATE        |
____________________________________
288066  |  Patrol     | 23/06/2019  |
273111  |  Guards     | 23/06/2019  |
231444  |  Courts     | 23/06/2019  |
298432  |  Courts     | 23/06/2019  |
_____________________________________

У меня есть это:

TABLEC
ID      | DUTY        | DATE        |
____________________________________
288066  |  Patrol     | 23/06/2019  |
288066  |  Guards     | 23/06/2019  |
288066  |  Courts     | 23/06/2019  |
288066  |  Courts     | 23/06/2019  |
273111  |  Patrol     | 23/06/2019  |
273111  |  Guards     | 23/06/2019  |
273111  |  Courts     | 23/06/2019  |
273111  |  Courts     | 23/06/2019  |
231444  |  Patrol     | 23/06/2019  |
231444  |  Guards     | 23/06/2019  |
231444  |  Courts     | 23/06/2019  |
231444  |  Courts     | 23/06/2019  |
298432  |  Patrol     | 23/06/2019  |
298432  |  Guards     | 23/06/2019  |
298432  |  Courts     | 23/06/2019  |
298432  |  Courts     | 23/06/2019  |
_____________________________________

Есть ли способ соединить TableA.ID и TableB.DUTY без автоматического умножения?

0 голосов
/ 22 июня 2019

Вы можете использовать мою функцию:

' Builds random row numbers in a select, append, or create query
' with the option of a initial automatic reset.
'
' 2018-09-11. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function RandomRowNumber( _
    ByVal Key As String, _
    Optional Reset As Boolean) _
    As Single
    ' Error codes.
    ' This key is already associated with an element of this collection.
    Const KeyIsInUse        As Long = 457

    Static Keys             As New Collection

    On Error GoTo Err_RandomRowNumber

    If Reset = True Then
        Set Keys = Nothing
    Else
        Keys.Add Rnd(-Timer * Keys.Count), Key
    End If

    RandomRowNumber = Keys(Key)

Exit_RandomRowNumber:
    Exit Function

Err_RandomRowNumber:
    Select Case Err
        Case KeyIsInUse
            ' Key is present.
            Resume Next
        Case Else
            ' Some other error.
            Resume Exit_RandomRowNumber
    End Select
End Function

в таком запросе:

SELECT
    ID,
    [Order ID],
    [Unit Price],
    RandomRowNumber(CStr([ID])) AS RandowRow
FROM
    [Order Details]
ORDER BY
    RandomRowNumber(CStr([ID]));

Это объясняется в моей статье Случайные строки в Microsoft Access .

Если у вас нет учетной записи, перейдите по ссылке: Прочитайте статью полностью.

Код также на GitHub : VBA.RowNumbers

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