创建查看多个表和不同的列名称

时间:2017-03-06 08:24:59

标签: sql view sql-server-2014

我的数据库中有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 等内。

如何创建看起来像给定示例的视图?

3 个答案:

答案 0 :(得分: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的列。

答案 1 :(得分: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]

我可能会做一些列拼写错误,但它会像那样

答案 2 :(得分: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.

无论你选择什么,我认为你不应该“选择*,而是指明你需要的东西”