這是一個讓我發瘋的事情,甚至可能都不可能。我有以下四個表格。爲簡潔起見,我刪除了不重要的列,索引,鍵,外鍵等。一個視圖中四個表的SQL Server條件連接
CREATE TABLE Client(
ClientID uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT (newid()),
ClientName varchar(250) not null
);
GO
CREATE TABLE Instance(
InstanceID uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT (newid()),
ClientID uniqueidentifier not null, /* FK into Client */
InstanceName varchar(48) not null
);
GO
CREATE TABLE Object(
ObjectID uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT (newid()),
ClientID uniqueidentifier not null, /* FK into Client */
InstanceID uniqueidentifier null, /* FK into Instance */
Path varchar(260) not null
);
GO
CREATE TABLE History(
Timestamp datetime DEFAULT (getdate()),
ClientID uniqueidentifier null, /* if not null, references Client */
InstanceID uniqueidentifier null, /* if not null, references Instance */
ObjectID uniqueidentifier null, /* if not null, references Object */
Details varchar(1024)
);
GO
我試圖在歷史記錄表上創建一個視圖。視圖中棘手的列是客戶名稱。如果History.ClientID不爲null,那麼很容易。但是,如果History.ClientID 是 null,但ObjectID 不是,那麼它需要通過History.ObjectID-> Object.ClientID-> Client.ClientName獲取ClientName。
這是最好的我可以拿出來,它的工作原理如果History.ClientID不爲空,但我不知道如何通過ObjectID獲取ClientName如果History.ClientID爲null。我希望這一切都很清楚。
CREATE VIEW History_Report as
SELECT
H.TimeStamp,
C.ClientName,
Q.InstanceName,
O.Path,
H.Details
from
History H
left join Instance Q ON (H.InstanceID = Q.InstanceID)
left join Object O on (H.ObjectID = O.ObjectID)
left join Client C on (H.ClientID = C.ClientID)
GO
這是最好的遊標嗎?
太棒了!謝謝。我忘記了COALESCE。 –