Обновить столбец с помощью расчета за последний год из другой таблицы - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь обновить (используя внутренние объединения для трех таблиц) статистику предметов STAT для таблицы IM_ITEM, выделив предметы, которые были проданы менее чем 12, как "D" (Прервать).

Во 2-й таблице PS_TKT_HIST_LIN есть столбец Количество проданных QTY_SOLD для каждого элемента в каждый день и столбец даты BUS_DAT.

. Мне также нужна третья таблица IM_INV для Отфильтруйте данные, я должен сказать, что последняя полученная дата LST_RECV_DAT для этих позиций раньше, чем "2019-01-01", а последняя дата продажи LST_SAL_DAT - после "2019-01-01". Я использовал следующий код

 UPDATE M
    SET M.STAT = 'D'
FROM
    dbo.IM_ITEM AS M
INNER JOIN
    IM_INV AS N
ON
    M.ITEM_NO = N.ITEM_NO
INNER JOIN
    dbo.PS_TKT_HIST_LIN S`
ON
    M.ITEM_NO  = S.ITEM_NO
WHERE
    CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, N.LST_RECV_DAT))) <= '2019-01-01'
AND CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, N.LST_SAL_DAT))) >= '2019-01-01'
AND M.STAT = 'A' 
AND SUM(case when DATEPART(YYYY, (BUS_DAT)) = DATEPART(YYYY, DATEADD(YYYY, -1, getdate()))
        AND DATEPART(yyyy, (BUS_DAT)) = DATEPART(yyyy, DATEADD(YYYY, -1, getdate()))
        then qty_sold else 0)<12

Поставляется с ошибкой. Любой совет, пожалуйста

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы должны использовать предложение HAVING вместо Sum в where.

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

;with cte as(
  select ITEM_NO, ..
  from ..
  group by ITEM_NO
  having  .. < 12
)

update M
set SET M.STAT = 'D'
from dbo.IM_ITEM AS M
inner join cte on M.ITEM_NO = cte.ITEM_NO
0 голосов
/ 25 февраля 2020

Вы не можете использовать функцию aggregate в предложении where, если это не определено в подзапросе.

...