2012-02-25 4 views
1

У меня есть таблица продуктов и таблица подробновыражение вычисляемого столбца в 2 таблицах

продукта

ID int 
Price int 

Деталь

ID int 
Quantity int 
Total int 

я делаю умножение Quantity * Price, что использовать команду SQL для использования? Благодаря

Я использую этот

ALTER TABLE DETAIL 
ADD Total AS Quantity * product.price where Detail.ID = Product.ID 
+0

В каком поле находятся эти таблицы? – MacGyver

+0

is id field ....: P – Mirko

+2

** Что ** система баз данных и какая версия ?? ** SQL ** - это только язык структурированных запросов - язык, используемый многими системами баз данных - SQL - это ** НЕ ** продукт базы данных ... такие вещи, как это очень часто зависят от поставщика, - поэтому нам действительно нужно знать, что система базы данных, которую вы используете .... –

ответ

2

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

Если вы используете SQL Server, ответ прост: вы не можете сделать это.

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

Теперь вы может быть в состоянии создать хранимую функцию, которая будет Хватай, что данные из другой таблицы - я бы НЕ сделать это. Помещение доступа к данным в хранимые функции - это верный рецепт катастроф производительности - просто не делайте этого!

решение здесь, вероятно, будет вид через две таблицы, которые будут делать расчет

CREATE VIEW dbo.ProductAndDetail 
AS 
    SELECT 
     p.ID, p.Price, 
     d.Quantity, 
     Total = ISNULL(d.Quantity, 0) * ISNULL(p.Price, 0.0) 
    FROM 
     dbo.Product p 
    INNER JOIN 
     dbo.Detail d ON p.ID = d.ID 

Затем вы можете выбрать из этой новой точки зрения:

SELECT ID, Price, Quantity, Total 
FROM dbo.ProductAndDetail 

и Total является рассчитанные «на лету» для каждого ряда

Обновление: ах - хорошо, это кажется вам нужно статические данные, установленные для представления отчетности - в этом случае, вы можете сделать следующее:

SELECT 
     p.ID, p.Price, 
     d.Quantity, 
     Total = ISNULL(d.Quantity, 0) * ISNULL(p.Price, 0.0) 
    INTO 
     dbo.ProductAndDetailsForReporting 
    FROM 
     dbo.Product p 
    INNER JOIN 
     dbo.Detail d ON p.ID = d.ID 

После этого вы получите новую таблицу dbo.ProductAndDetailsForReporting, содержащую все строки из Product и Detail а рассчитано Total столбец. Теперь запустите свои отчеты в этой таблице - он будет не изменяет, если вы ничего не измените сами (в отличие от просмотра, которое всегда обновляется).

+0

Вы должны показать мне несколько примеров? :/ – Mirko

+0

Я скопировал ваш код, когда я вставляю данные в свое мнение, говорит, что значение Total не может быть нулевым – Mirko

+0

вы можете помочь? : D – Mirko

0

вы код должен быть примерно как

employe.Quantity * product.price where empoye.ID=product.ID 

, что это идея и должна помочь вам.

+0

Я обновляю свой вопрос, но я не думаю, что это правильно .... – Mirko

0

Попробуйте это ..

SELECT (Product.Price * Detail.Quantity) AS 'answer' 
FROM Product 
INNER JOIN Detail ON Product.ID = Detail.ID 
WHERE Product.Price IS NOT NULL AND Detail.Quantity IS NOT NULL AND Product.Price != '' AND Detail.Quantity != '' 

ИЛИ ..

SELECT (Product.Price * Detail.Quantity) AS 'answer' 
FROM Product 
LEFT OUTER JOIN Detail ON Product.ID = Detail.ID 
WHERE Product.Price IS NOT NULL AND Product.Price != '' 
+1

Мне нужно detail.id = product.id – Mirko

+0

см. мой отредактированный ответ с этим соединением – MacGyver

+0

Проблема в том, что Мне не нужно делать запросы .. но вычисленный столбец – Mirko

0

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

+0

Можете ли вы показать мне несколько примеров, если у вас есть время? – Mirko

+1

@marc_s уже написал хороший пример, см. Его сообщение – cairnz

Смежные вопросы