根据相同 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。
在 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。