在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 |
答案 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提到的解决方案回答了问题。使用他的代码用表中的可用数据更新表。