2017-05-12 5 views
0

Ich habe Broadcasts, Agenten und Anzeige Tabellen:Computed Säule aus verschiedenen Tabellen

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 
); 

Ich möchte eine berechnete Spalte berechnen:

Agent_commission AS (((Minute_cost * Duration_in_minutes)/Agent_percent) 

Ich habe versucht, Views, Triggers und UDF zu verwenden. Aber ich kann es nicht tun.

Ich brauche den einfachsten Weg, weil dies ein Trainingsprojekt ist. Danke.

+1

try Ansicht, ich glaube, Sie kippe Verwendung berechnete Spalte aus zwei Tabellen, können Sie auch wenn UDF – TheGameiswar

Antwort

2

Eine berechnete Spalte kann nicht direkt auf Spalten in anderen Tabellen verweisen. Eine Möglichkeit besteht darin, eine benutzerdefinierte Skalarfunktion zur Berechnung der Provision zu schreiben.

Sie haben zwei weitere Optionen:

  • eine Ansicht Verwenden Sie statt einer Tabelle.
  • Verwenden Sie eine benutzerdefinierte Tabellenfunktion.

Welches ist am besten hängt davon ab, wie die Kommission verwendet wird. Ich würde dir raten, mit einer Ansicht mit der Logik zu beginnen, die du willst. Möglicherweise möchten Sie Spalten aus mehreren Tabellen.

0


Sie können unten folgen die Schritte
Tabelle erstellen

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 
); 

Spalten auswählen

erforderlich
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); 

die Auswahlabfrage verwenden, können Sie in neue Tabellen einfügen

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); 

Wenig Klarstellung,
* Von wo erhalten Sie Duration_in_minutes
* Was ist Advert_code, gerade jetzt bin null, wählen Sie gegebenenfalls Orakel-Sequenz oder wählen Sie aus einer anderen Tabelle.

Sie können auch gleiche Auswahlabfrage verwenden, um Ansichten zu erstellen

Verwandte Themen