2017-03-06 63 views
0

我有我的數據庫2個表:創建視圖多個表和不同的列名

DetectorStatus

DetectorStatusID DetectorID DateTime DetectorModeID Status 
     1    471   time   2   0.7 

StationStatus

StationStatusID DetectorID DateTime StationModeID Status 
     1    1541  time   2   0.74 

我想創建一個視圖,看起來像這樣:

StationStatusID DetectorStatusID DetectorID DateTime StationModeID DetectorModeID Status 
     NULL     1    471   time   NULL    2   0.7 
     1     NULL   1541  time   2     NULL   0.74 

現在,當我創建這樣的觀點:

CREATE view statusoverview AS 
    SELECT * FROM [GMS_MAN].[dbo].[DetectorStatus] 
    UNION ALL 
    SELECT * FROM [GMS_MAN].[dbo].[StationStatus] 

我得到的所有內1個表中的結果。然而StationModeID在裏面DetectorModeID

如何創建看起來像給定例子的圖?

+1

選擇空欄爲好。 – jarlh

+0

當我更改* SELECT * FROM *並添加列+ NULLS時,它說:**沒有指定列1的視圖名稱列** – Mitch

回答

1

您需要確保兩個結果集包含所有你想要的列:

CREATE view statusoverview AS 
SELECT null as StationStatusID, 
     DetectorStatusID, 
     DetectorID, 
     DateTime, 
     null as StationModeID, 
     DetectorModeID, 
     Status 
FROM [GMS_MAN].[dbo].[DetectorStatus] 
UNION ALL 
SELECT StationStatusID, 
     null, 
     DetectorID, 
     DateTime, 
     StationModeID, 
     null, 
     Status 
FROM [GMS_MAN].[dbo].[StationStatus] 

注意,列名第一個查詢取,因此它需要命名的所有列。第二個可以省略命名爲其提供null的列。

+0

謝謝!它給了我想要的確切結果。寫的也很清晰易懂。可以在5分鐘內接受答案。 – Mitch

1
SELECT null as StationStatusID,DetectorStatusID,DetectorID,DateTime,null StationModeID,DetectorModeID,Status FROM [GMS_MAN].[dbo].[DetectorStatus] 
    UNION ALL 
    SELECT StationStatusID, null, DetectorID,DateTime,StationModeID, null ,Status FROM [GMS_MAN].[dbo].[StationStatus] 

我可能會做一些列的拼寫錯誤,但它iwll是類似的東西

0

那麼,你會不會使用SELECT *,你會指定要在你的表中的列:

CREATE view statusoverview AS 
SELECT detector.*, station.StationStatusID, station.StationMode,station.Status 
FROM DetectorStatus detector 
LEFT JOIN StationStatus station ON station.DetectorID=detector.DetectorID. 

無論你選擇,我想你不應該「SELECT *,但註明你所需要的」