我面临着一个巨大的问题!我是希腊雅典中央警察局的警务人员,我正在尝试创建一个数据库,该数据库每天自动为约200 -300名警务人员创建工作时间表。
我创建了3个表:
A)包含300名军官及其ID的所有信息的表(作为与表C“连接的主键),以及其他信息(例如地址),当他们转移给我们时,将其命名为“表A”
B)一张桌子,上面有官员可能需要的所有可能的地方
例如,列A [NOT THE HEADER]中的记录为“ Police patrols”,列B:“我们将为该服务提供服务的人数”,为此我创建了一个查询(带有统计表,因此它可以重复许多记录如我所愿,例如,如果我需要30个人巡逻,它将在表C中创建此服务的30条唯一记录,并且我已经为日期设置了输入,因此它可以在表C中自动输入日期。 />
C)表C:这里我有信息,例如由查询创建的带有工作时间的所有服务,以及将分配给特定地点的人员ID的列。
现在,我被困在尝试以随机顺序更新表C,特别是ID号列,以及表A中所有警察的ID号列。(我还没有到达随机部分但是,每次我更新表C时,它只会从表A的第一条记录中获取ID,而忽略了所有其他记录,因此它将相同的ID号放入我需要的30个位置,并且不会显示来自表A)
WHERE (((TableC.DateofDuty)=[Date]));
我很幸运,因为表C中的每条记录都从表A获得了相同的ID。
我也尝试过这个:
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]));
在第一行代码中,它更新了所有我想更新但具有相同ID的记录。在第二条记录中,它询问我是否要填充特定的地方(比如说100个我想要的地方),我按“是”并且没有ID更新。
我也尝试过内部连接,但没有运气
非常感谢您的帮助
编辑:我刚刚注意到我的邮件被标记为不足,所以 我会再说一些细节
这是需要填充/更新的表: 表C
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) 我什至把1/1/2019只是为了确保它不是引起问题的输入
第二次尝试:
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]));
将输入到我输入的日期的ID更新为“ Random Text” 但是,一旦我将Table A重新放回游戏中,它就会返回0值
只要我弄清楚,我就会继续尝试。我确信这一定是我真的很想念的东西。
答案 0 :(得分:0)
您可以使用我的功能:
' 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]));
在我的文章Random Rows in Microsoft Access中对此进行了解释。
如果您没有帐户,请浏览链接:阅读全文。
代码也在 GitHub 上:VBA.RowNumbers
答案 1 :(得分:0)
所以我有点想通了 让我真的快速回顾一下 我们有:
TABLEA
ID | POLICE RANK | FULL NAME |
____________________________________
288066 | Const. | Chris Meli |
273111 | Serg. | John Do |
231444 | Const. | Bill Park |
298432 | Const. | Joe Park |
_____________________________________
包含警务人员的信息,并连接到 TableC 中的 ID 字段,因此,即使从TableA上的连接,您也可以检查每名警官的职责分配给前几天。
TABLEB
DUTY | Number of Police needed |
| for each service |
____________________________________
Patrol | 1 |
Guards | 1 |
Courts | 2 |
____________________________________
为简单起见,我将数字1和2放在数字中。通常, TableA 将容纳超过250人,并且在 TableB 上将有许多 Duty ,并且需要的警察数量将取决于日期和许多其他因素。
TABLEC
ID | DUTY | DATE |
____________________________________
| | |
| | |
| | |
| | |
_____________________________________
TableC将由TableA(ID),TableB(Duty)填充,并且输入日期i将通过以下附加查询进行调度
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?