Вычисляемый столбец SQL Server выбрать из другой таблицы - PullRequest
18 голосов
/ 29 июля 2011

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

У меня есть две таблицы:

Заказы

OrderId
PackageId
MediaSpend
TotalAdViews (Computed column)

Пакеты

PackageId
BaseAdViews

Каждому заказу присваивается пакет, который включает в себя, например, 1000 просмотров, затем вы можете купить больше расходов на медиа, чтобы получить больше просмотров.Я хотел создать столбец с именем TotalAdViews, который бы добавил BaseAdViews + MediaSpend.Насколько я понимаю, если постоянство включено, столбцу не нужно будет пересчитывать каждый раз при запросе, что может повысить производительность.

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

Ответы [ 3 ]

56 голосов
/ 26 сентября 2013

Я знаю, что этот ответ приходит с опозданием на два года, но только для того, чтобы помочь любому, кто ищет и находит этот пост:

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

CREATE FUNCTION dbo.getSumAdViews(@packageId int)
RETURNS TABLE
AS
RETURN
    select SUM(BaseAdViews) from Packages where PackageId = @packageId

Затем в вычисляемом столбце просто используйте выражение dbo.getSumAdViews(PackageId)

16 голосов
/ 29 июля 2011

Вы не сможете использовать столбцы из другой таблицы в выражении вычисляемого столбца.Это выдержка из документации MSDN .

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

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

1 голос
/ 24 марта 2016

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

select <<add other columns you need>> mediaspend+basicadviews as totaladviews
from 
orders o
join
packages p
on p.packageid=o.orderid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...