Обновить пустые поля таблицы MS Access на основе той же таблицы - PullRequest
0 голосов
/ 19 июня 2019

В базе данных 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 ]

1 голос
/ 19 июня 2019

Вы можете сделать это только с помощью 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)
0 голосов
/ 21 июня 2019

Вопрос, на который ответил решение, упомянутое @John Mo. Использовал его код для обновления таблицы данными, доступными в таблице.

0 голосов
/ 19 июня 2019

Попробуйте использовать функцию доменного агрегата, чтобы вытащить клиента:

UPDATE table1 SET table1.Customer = DMax("Customer","table1","Invoicenumber=" & [Invoicenumber])
WHERE (((table1.Customer) Is Null));
0 голосов
/ 19 июня 2019

Вы можете поместить оператор Switch в обновление, чтобы выбрать значение для обновления на основе состояния поля CUSTOMER.

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

Этот оператор обновит поле CUSTOMER до OTHER_FIELD, где CUSTOMER пустоили клиент является нулевым.Если 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Я не знаю другого пути.

...