SQL Server 2005 Вычисляет Столбец В результате агрегирования Значения другого поля таблицы
-
03-07-2019 - |
Вопрос
Извините за длинное название вопроса.
Думаю, в этом деле я проиграл, но на всякий случай.
Возможно ли сделать вычисление вычисляемого поля в таблице результатом агрегатной функции, примененной к полю в другой таблице.
т. е.
У вас есть таблица под названием "кружка", у нее есть дочерний элемент под названием "цвет" (от которого у меня начинает болеть голова в Великобритании, но поставщик из США, что вы собираетесь делать?), а у этого, в свою очередь, есть дочерний элемент под названием "размер".В каждой таблице есть поле под названием продано.
Размер.продано увеличивается на 1 за каждую проданную кружку определенного цвета и размера.
Вам нужен цвет.продано должно быть суммой SUM size.продано, ГДЕ size.colorid = color.colorid
Вам нужна кружка.продано, чтобы быть совокупным цветом SUM.продано, ГДЕ color.mugid = mug.mugid
Есть ли что-нибудь, чтобы сделать кружку.продано и покрасить.проданные просто разбираются сами по себе, или мне придется возиться с триггерами?
Решение
вы не можете заставить вычисляемый столбец напрямую ссылаться на другую таблицу, но вы можете заставить его ссылаться на пользовательскую функцию.вот ссылка на пример реализации подобного решения.
http://www.sqlservercentral.com/articles/User-Defined+functions/complexcomputedcolumns/2397/
Другие советы
Нет, это невозможно сделать.Вычисляемый столбец может быть получен только из значений других полей в той же строке.Чтобы вычислить агрегат по другой таблице, вам нужно создать представление.
Если вашему приложению необходимо показать статистику, задайте следующие вопросы:
- Действительно ли необходимо показывать это в режиме реального времени?Если да, то почему?Если это действительно необходимо сделать, то вам придется использовать триггеры для обновления таблицы. Это ссылки на короткую статью в Википедии о денормализации.Триггеры влияют на производительность записи при обновлении таблицы и зависят от того, активны ли триггеры.
- Если это необходимо только для целей составления отчетов, вы могли бы выполнить вычисление в представлении или отчете.
- Если необходимо поддерживать частые нерегламентированные отчеты, вы можете оказаться в сфере витрины данных и быстрого процесса ETL.