SQL создает вычисляемый столбец из другого столбца

#sql #sql-server

#sql #sql-сервер

Вопрос:

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

Существующая таблица с именем ТАБЛИЦА 1

 ID  GROUP ITEM_NO COST_A COST_B
1   1     1001    20.00  30.00
2   1     1002    10.00  25.00
3   2     1005    15.00  25.00
 

В новой таблице с именем Таблица 2 я хочу иметь следующее.
По сути, GROUP_TOTALCOST — это COST_A плюс COST_B для каждой группы

 Code GROUP(FK) GROUP_TOTALCOST
001  1         85.00
002  2         40.00
 

Это то, чего я могу достичь в инструкции ALTER TABLE ADD COLUMN или CREATE TABLE?
Спасибо

Комментарии:

1. какую СУБД вы используете?

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

3. @eshirvana спасибо. Если рассматривать все варианты, что мне делать, если я хочу, чтобы столбец GROUP_TOTALCOST каким-то образом обновлялся автоматически при изменении в ТАБЛИЦЕ 1? Нужно ли мне обновлять каждый раз, когда меняются затраты?

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

Ответ №1:

Создайте представление для получения значений, вычисляемых на лету:

 CREATE VIEW <NAME> AS 
SELECT [GROUP],SUM(COST_A   COST_B) FROM TABLE1 GROUP BY [GROUP]
 

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

 CREATE TABLE <NAME> AS 
SELECT [GROUP],SUM(COST_A COST_B) FROM TABLE1 GROUP BY [GROUP]
 

В обоих случаях вы будете использовать SELECT * FROM <NAME> для получения своих данных.

Ответ №2:

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

вот синтаксис, который может потребоваться рассмотреть, если вы используете sql server

 create view yourviewname
as 
select 
ROW_NUMBER() over (order by GROUP) as rownumber ,  GROUP, sum(Cost_A)   sum( COst_B) as GROUP_TOTALCOST
from testx
group by GROUP