Обновление столбца со значением из другой таблицы, не может использовать отдельную функцию - PullRequest
3 голосов
/ 07 февраля 2012

table

Мои исходные данные приведены в таблице 2.Я создал Table1 с нуля.Я заполнил столбец A следующим образом:

INSERT INTO Table1("item")
SELECT DISTINCT(Table2."item")
FROM Table2

Я заполнил Table1.Totals (столбец B) следующим образом:

UPDATE Table1
SET totals = t2.q
    FROM Table1 INNER JOIN
    (
        SELECT t2."item"
        , SUM(t2.quantity) AS q
        FROM t2
        GROUP BY t2."item"
    ) AS t2
    ON Table1."item" = t2."item"

Как мне заполнить Table1. "Date"?Мое ОБНОВЛЕНИЕ выше не работает, потому что я не могу использовать статистическую функцию на дату.Мне удалось получить результаты, которые я хотел, используя следующий код в отдельном запросе:

SELECT DISTINCT Table1."item"
, Table2."date"
FROM Table1 INNER JOIN Table2
ON Table1."item" = Table2."item"
ORDER BY Table1."item"

Но как мне использовать результаты этого запроса для установки значения столбца?Я использую SQL Server 2008.

Ответы [ 4 ]

6 голосов
/ 07 февраля 2012

Если вы не можете выполнить вставку заново, как предложил @Lamak, тогда вы можете выполнить UPDATE следующим образом:

UPDATE t1
  SET t1.Date = s.Date
  FROM Table1 AS t1
  INNER JOIN 
  (
    SELECT Item, [Date] = MAX([Date]) -- or MIN()
      FROM Table2
      GROUP BY Item
  ) AS s
  ON t1.Item = s.Item;
4 голосов
/ 07 февраля 2012

Для SQL Server вы можете использовать один оператор INSERT:

INSERT INTO Table1(Item, Totals, [Date])
SELECT Item, SUM(Quantity), MIN([Date]) -- It could be MAX([Date])
FROM Table2
GROUP BY Item
0 голосов
/ 07 февраля 2012

Вместо создания таблицы вы можете создать представление , используя оператор выбора, как в @ ответ Ламака . Таким образом, вам не придется обновлять новый набор строк каждый раз, когда обновляется Table2.

0 голосов
/ 07 февраля 2012

Самый простой способ - использовать простой CTAS (создать таблицу как выбор):

select item as item, SUM(quantity) as Q, MIN(date) as d into table2
from table1
group by item
...