#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