Результат вычисляемого столбца SQL Server 2005 из совокупности значений другого поля таблицы - PullRequest
4 голосов
/ 03 октября 2008

Извините за длинное название вопроса.

Полагаю, на этом я проиграл, но не случайно.

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

т.е.

У вас есть стол с именем «кружка», у него есть ребенок с именем «цвет» (от этого у меня болит голова в Великобритании, но продавец из США, что вы собираетесь делать?), И у него, в свою очередь, есть ребенок называется "размер". У каждой таблицы есть поле с названием продано.

Размер.sold увеличивается на 1 для каждой кружки определенного цвета и размера.

Вы хотите, чтобы color.sold был агрегатом SUM size.sold WHERE size.colorid = color.colorid

Вы хотите, чтобы mug.sold был совокупностью SUM color.sold WHERE color.mugid = mug.mugid

Есть ли в любом случае, чтобы mug.sold и color.sold просто работали сами или мне придётся копаться с триггерами?

Ответы [ 2 ]

6 голосов
/ 03 октября 2008

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

http://www.sqlservercentral.com/articles/User-Defined+functions/complexcomputedcolumns/2397/

2 голосов
/ 03 октября 2008

Нет, это невозможно сделать. Вычисляемый столбец может быть получен только из значений других полей в той же строке. Для расчета агрегата по другой таблице необходимо создать представление.

Если ваше приложение должно показывать статистику, задайте следующие вопросы:

  1. Действительно ли необходимо показывать это в реальном времени? Если так, то почему? Если это действительно необходимо, то вам придется использовать триггеры для обновления таблицы. Эта ссылка на короткую статью в Википедии о денормализации. Триггеры влияют на производительность записи при обновлении таблиц и зависят от активности триггеров.
  2. Если это необходимо только для целей отчетности, вы можете выполнить расчет в виде или отчете.
  3. Если необходимо поддерживать частые специальные отчеты, вы можете попасть в области витрины данных и процесса ETL за ночь.
...