更新基于同一表的MS Access表空字段

时间:2019-06-19 12:38:16

标签: ms-access sql-update is-empty

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

在问题上进行了搜索,但未找到满意的答案。有人可以告诉我该如何构建查询吗?

当前表格如下

| 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 |

更新后,我需要该表如下所示:

| 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 |

4 个答案:

答案 0 :(得分:1)

您可以通过将表自身连接到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)

答案 1 :(得分:0)

您可以在更新中放入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”语句是Access中代码中“ Switch”或“ Select Case”的版本,其中第一个参数是要检查的条件,后面的参数是如果前一个条件返回true时要采用的值。所以...

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

将返回“ YES”,因为1等于1。

使用代码执行此操作会更雄辩,但是在Access查询中,我不知道其他任何方法。

答案 2 :(得分:0)

尝试使用域汇总功能吸引客户:

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

答案 3 :(得分:0)

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