根据相同 table 更新 MS Access table 空字段

Update MS Access table empty fields based on same table

在 MS Access 数据库中,我正在使用具有行的 table。在某些情况下,并非所有行的列都被填充。我想创建一个更新查询,以使用列不为空的其他行中的数据更新空字段的值。

用谷歌搜索了这个问题,但没有找到令人满意的答案。有人可以告诉我应该如何构建查询吗?

现在的table看起来像

| Invoicenumber | Customer | Date    |
|---------------|----------|---------|
| 5             | 12       | 12-6-19 |
| 5             |          | 12-6-19 |
| 5             |          | 12-6-19 |
| 5             |          | 12-6-19 |
| 6             | 18       | 15-6-19 |
| 6             |          | 15-6-19 |
| 6             |          | 15-6-19 |
| 7             | 20       | 20-6-19 |
| 7             |          | 20-6-19 |

我需要 table 在更新后看起来像这样:

| Invoicenumber | Customer | Date    |
|---------------|----------|---------|
| 5             | 12       | 12-6-19 |
| 5             | 12       | 12-6-19 |
| 5             | 12       | 12-6-19 |
| 5             | 12       | 12-6-19 |
| 6             | 18       | 15-6-19 |
| 6             | 18       | 15-6-19 |
| 6             | 18       | 15-6-19 |
| 7             | 20       | 20-6-19 |
| 7             | 20       | 20-6-19 |

您可以将 Switch 语句放入更新中,以根据 CUSTOMER 字段的状态选择要更新的值。

Update TestTable 
Set CUSTOMER = Switch(CUSTOMER is  Null,OTHER_FIELD,CUSTOMER = '',OTHER_FIELD,CUSTOMER<>'',CUSTOMER)

此语句会将 CUSTOMER 字段更新为 OTHER_FIELD,其中 CUSTOMER 为空或 CUSTOMER 为 Null。如果 CUSTOMER 有值,则将其设置为该值(基本上保持不变。)

'SWITCH'语句是代码中的'Switch'或'Select Case'的Access版本,其中第一个参数是要检查的条件,后面的参数是要取的值如果前面的条件 return 为真。所以...

Switch(1=1,'YES',2=1,'NO', case 3, return 3, case 4, return 4, etc., etc.,) 

会 return 'YES' 因为 1 等于 1。

还有更多 eloquent 方法可以用代码来实现,但在 Access 查询中,我不知道任何其他方法。

尝试使用域聚合函数拉取客户:

UPDATE table1 SET table1.Customer = DMax("Customer","table1","Invoicenumber=" & [Invoicenumber])
WHERE (((table1.Customer) Is Null));

您可以通过将 table 连接到自身来仅使用 SQL 来完成此操作:

UPDATE 
    Invoices 
    INNER JOIN Invoices AS Inv2
    ON Invoices.InvoiceNumber = Inv2.InvoiceNumber
SET
    Invoices.Customer = Inv2.Customer
WHERE 
    (Invoices.[Customer] Is Null)
    AND (Inv2.Customer IS NOT NULL)

@John Mo 提到的解决方案回答了问题。使用他的代码用 table 中可用的数据更新 table。