Обновите запрос, просто показывая нулевые значения, когда существуют ненулевые значения.(ДОСТУП) - PullRequest
0 голосов
/ 25 октября 2018

Я боролся с этим часами.Я пытаюсь обновить все значения с одинаковым значением SHORT # .Если ' SHORT # ' находится в 017_PolWpart2 , я хочу, чтобы это значение было обновлением соответствующего ' SHORT # ' в 017_WithdrawalsYTD_changelater ,Этот запрос на обновление просто отображает нули, но эти значения на самом деле не равны нулю.

Так сказать, 017_WithdrawalsYTD_changelater выглядит так:

SHORT# WithdrawalsYTD
1          0
2          0
3          0
4          0
5          0

и 017_PolWpart2 выглядит так:

SHORT# Sum_MTD_AGG
3          50
5          12

Я хочу это:

SHORT# WithdrawalsYTD
1          0
2          0
3          50
4          0
5          12

Но я получаю это:

SHORT# WithdrawalsYTD
1          0
2          0
3          0
4          0
5          0

Я приложил SQL дляЗапрос ниже.

Спасибо!

UPDATE 017_WithdrawalsYTD_changelater 
INNER JOIN 017b_PolWpart2 ON [017_WithdrawalsYTD_changelater].[SHORT#] = 
                 [017b_PolWpart2].[SHORT#] 
SET [017_WithdrawalsYTD_changelater].WithdrawalsYTD = [017b_PolWpart2].[Sum_MTD_AGG];

РЕДАКТИРОВАТЬ: Поскольку я должен агрегировать на лету, я пытался это сделать.Все еще получаю всевозможные ошибки.Обратите внимание, что таблица 17a_PolicyWithdrawalMatch имеет вид:

SHORT# MTG_AGG     WithdrawalPeriod       PolDurY
1          3                 1            1
1          5                 1            0
2          2                 1            1
2          22                1             1

Итак, я агрегирую:

SHORT# MTG_AGG     
1          3                 
2          24      

И помещаю эти агрегированные значения в 017_WithdrawalsYTD_changelater .

Я пытался сделать это так:

SELECT [017a_PolicyWithdrawalMatch].[SHORT#], Sum([017a_PolicyWithdrawalMatch].MTD_AGG) AS Sum_MTD_AGG
WHERE ((([017a_PolicyWithdrawalMatch].WithdrawalPeriod)=[017a_PolicyWithdrawalMatch].[PolDurY]))
GROUP BY [017a_PolicyWithdrawalMatch].[SHORT#]
UPDATE 017_WithdrawalsYTD_changelater INNER JOIN 017a_PolicyWithdrawalMatch ON [017_WithdrawalsYTD_changelater].[SHORT#] = [017a_PolicyWithdrawalMatch].[SHORT#] SET 017_WithdrawalsYTD_changelater.WithdrawalsYTD =Sum_MTD_AGG;

Мне не повезло ... Мне сказали, что оператор SELECT использует зарезервированное слово ...: (*

1 Ответ

0 голосов
/ 26 октября 2018

Подумайте о том, чтобы учесть комментарии @ June7, чтобы избежать использования сохранения сводных данных в таблице, поскольку они избыточно используют ресурсы хранения, поскольку такие данные можно легко запрашивать в режиме реального времени.Кроме того, такие агрегированные значения немедленно становятся историческими цифрами, поскольку они сохраняются в статической таблице.

В MS Access запросы на обновление должны поступать из обновляемых объектов, для которых не агрегированные запросы, а только для чтения типов.Следовательно, они не могут использоваться в UPDATE выражениях.

Однако, если вам действительно нужно хранить сводные данные, рассмотрите возможность использования функций домена , таких как DSUM внутриUPDATE.Ниже предполагается, что SHORT # является строковым столбцом.

UPDATE [017_WithdrawalsYTD_changelater] c
SET c.WithdrawalsYTD = DSUM("MTD_AGG", "[017a_PolicyWithdrawalMatch]", 
                            "[SHORT#] = '" & c.[SHORT#] & "' AND WithdrawalPeriod = [PolDurY]")

Тем не менее, совокупное значение может запрашиваться и обновляться до текущих значений по мере необходимости.Также обратите внимание на использование псевдонимов таблиц для сокращения длины длинных имен таблиц:

SELECT m.[SHORT#], SUM(m.MTD_AGG) AS Sum_MTD_AGG
FROM [017a_PolicyWithdrawalMatch] m
WHERE m.WithdrawalPeriod = m.[PolDurY]
GROUP BY m.[SHORT#]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...