Sql 来自不同表的计算列

Sql 来自不同表的计算列,sql,sql-server,Sql,Sql Server,我有广播、代理和广告表: CREATE TABLE Broadcasts ( Broadcast_code INT IDENTITY(1,1)PRIMARY KEY, Minute_cost SMALLMONEY NOT NULL ); CREATE TABLE Agents ( Agent_code INT IDENTITY(1,1)PRIMARY KEY, Agent_percent FLOAT NOT NULL, ); CREATE TABLE Advert ( Advert_code

我有广播、代理和广告表:

CREATE TABLE Broadcasts (
Broadcast_code INT IDENTITY(1,1)PRIMARY KEY,
Minute_cost SMALLMONEY NOT NULL
);

CREATE TABLE Agents (
Agent_code INT IDENTITY(1,1)PRIMARY KEY,
Agent_percent FLOAT NOT NULL,
);

CREATE TABLE Advert (
Advert_code INT IDENTITY(1,1)PRIMARY KEY,
Agent_commission AS ((Minute_cost * Duration_in_minutes) / Agent_percent),
Broadcast_code INT FOREIGN KEY REFERENCES Broadcasts (Broadcast_code) NOT NULL,
Agent_code INT FOREIGN KEY REFERENCES Agents (Agent_code) NOT NULL
);
我要计算一个计算列:

Agent_commission AS (((Minute_cost * Duration_in_minutes) / Agent_percent)
我尝试使用视图、触发器和UDF。但我做不到

我需要最简单的方法,因为这是一个培训项目。
谢谢。

计算列不能直接引用其他表中的列。一种选择是编写一个用户定义的标量函数来计算佣金

您还有两个选择:

  • 使用视图而不是表
  • 使用用户定义的表函数

哪一个最好取决于委员会将如何使用。我建议你从你想要的逻辑出发。您可能会发现需要多个表中的列。

计算列不能直接引用其他表中的列。一种选择是编写一个用户定义的标量函数来计算佣金

您还有两个选择:

  • 使用视图而不是表
  • 使用用户定义的表函数

哪一个最好取决于委员会将如何使用。我建议你从你想要的逻辑出发。您可能会发现需要多个表中的列。


您可以按照以下步骤操作
创建表

CREATE TABLE Advert (
Advert_code INT IDENTITY(1,1)PRIMARY KEY,
Agent_commission INT,
Broadcast_code INT FOREIGN KEY REFERENCES Broadcasts (Broadcast_code) NOT NULL,
Agent_code INT FOREIGN KEY REFERENCES Agents (Agent_code) NOT NULL
);
选择所需的列

SELECT 
NULL AS Advert_code,
((B.Minute_cost * Duration_in_minutes) / A.Agent_percent),
B.Broadcast_code,
A.Agent_code
FROM Broadcasts B
INNER JOIN Agents A
ON (B.Broadcast_code = A.Agent_code );
使用select查询,可以插入到新表中

INSERT INTO Advert 
SELECT 
NULL AS Advert_code,
((B.Minute_cost * Duration_in_minutes) / A.Agent_percent),
B.Broadcast_code,
A.Agent_code
FROM Broadcasts B
INNER JOIN Agents A
ON (B.Broadcast_code = A.Agent_code );
很少澄清,
*从哪里获得持续时间(以分钟为单位)
*什么是广告代码,现在我正在选择null,如果需要,您可以使用oracle序列或从另一个表中选择


您还可以使用相同的选择查询创建视图


您可以按照以下步骤操作
创建表

CREATE TABLE Advert (
Advert_code INT IDENTITY(1,1)PRIMARY KEY,
Agent_commission INT,
Broadcast_code INT FOREIGN KEY REFERENCES Broadcasts (Broadcast_code) NOT NULL,
Agent_code INT FOREIGN KEY REFERENCES Agents (Agent_code) NOT NULL
);
选择所需的列

SELECT 
NULL AS Advert_code,
((B.Minute_cost * Duration_in_minutes) / A.Agent_percent),
B.Broadcast_code,
A.Agent_code
FROM Broadcasts B
INNER JOIN Agents A
ON (B.Broadcast_code = A.Agent_code );
使用select查询,可以插入到新表中

INSERT INTO Advert 
SELECT 
NULL AS Advert_code,
((B.Minute_cost * Duration_in_minutes) / A.Agent_percent),
B.Broadcast_code,
A.Agent_code
FROM Broadcasts B
INNER JOIN Agents A
ON (B.Broadcast_code = A.Agent_code );
很少澄清,
*从哪里获得持续时间(以分钟为单位)
*什么是广告代码,现在我正在选择null,如果需要,您可以使用oracle序列或从另一个表中选择


您也可以使用相同的选择查询来创建视图

try view,我认为您不能使用两个表中的计算列,您也可以使用UDF thoughtry view,我认为您不能使用两个表中的计算列,但您也可以使用UDF