2017-04-25 5 views
1

私は見ています。どのような私が今持っていることは次のとおりです。ビューに参加するT-SQL

CREATE VIEW [dbo].[vwEventDetails] 
AS 
SELECT 
    ISNULL(ROW_NUMBER() OVER (ORDER BY EventID), 999999999) AS Row, 
    STUFF(DetectorID, len(DetectorID), 1, '0') as SiteID, 
    DetectorID AS DetectorID, 
    StartedOn AS StartedOn, 
    EndedOn AS EndedON, 
    EventDescription AS EventDescription, 
    EventCategoryID AS EventCategoryID, 
    EventSeverityLevelID AS EventSeverityLevelID, 
    EventStatusID AS EventStatusID, 
    Processed AS Processed, 
    CASE WHEN EndedOn IS NOT NULL 
     THEN 
      DATEDIFF(SECOND, StartedOn, EndedOn)/ 3600.0 
     ELSE 
      DATEDIFF(SECOND, StartedOn, CURRENT_TIMESTAMP)/ 3600.0 
    END 
     AS Duration 

FROM Event 

GO 

私は、このビューから取得していた結果は次のとおりです。 View Result

私は取得しています、結果は正しいです。しかし、私はイベントテーブルにない1つのより多くの価値が必要です。そして私はこの価値を得る方法を知らない。

ビューはイベントに基づいています。これは次のようになります。DetectorIDと呼ばれる行があり、この表に今

Event Table


DetectorIDがテーブルにつながる:検出器

Detector Table

この表では、TrackIDという名前の列が表示されます。
TrackIDテーブルトラックにつながる:

Track Table

テーブルにおいてTrackName名前行が存在します。
これは、ビューで必要な値です。 これを達成する方法はありますか?

したがって、基本的に短い要約です。 イベントに基づいてビューを経て>トラック

- >検出器 -

イベント: から行く方法はありますか?

答えて

1

他のテーブルに結合することは、SQLではかなり標準的なことです。

あなたが一致DetectorTrackがある場合にのみ行を返すにinner joinを使用することができ、または対応するテーブル内の値が一致することはできませんときにleft joinを使用することができます。

また、には、が含まれています。は返されません。あなたが2でそれを行うことができます

--create view dbo.vwEventDetails as 
select 
    row_number() over (order by e.EventId) as Row 
    , stuff(DetectorId, len(e.DetectorId), 1, '0') as SiteId 
    , e.DetectorId 
    , e.StartedO 
    , e.EndedOn 
    , e.EventDescription 
    , e.EventCategoryId 
    , e.EventSeverityLevelId 
    , e.EventStatusId 
    , e.Processed 
    , case when e.EndedOn is not null 
     then datediff(second, e.StartedOn, e.EndedOn)/ 3600.0 
     else datediff(second, e.StartedOn, current_timestamp)/ 3600.0 
     end as Duration 
    , t.TrackId 
    , t.FromName 
    , t.ToName 
    , t.TrackName 
from Event e 
    inner join Detector d 
    on e.DetectorId = d.DetectorId 
    inner join Track t 
    on d.TrackId = t.TrackId 
+0

ありがとう、これは動作しています!私はJoinsについてよく知らないし、複数のテーブルを結合する方法も知らなかった。また、ビューでも。しかし、本当にありがとう! – Mitch

+1

@Mitch助けて嬉しいです! – SqlZim

1

は、結合文:

... 
FROM Event 
JOIN Detector ON Event.DetectorID = Detector.DetectorID 
JOIN Track ON Detector.DetectorID = Track.TrackID 

は、次に選択フィールド

の終わりにTrack.TrackNameを追加(あなたはあなたの他のフィールドどこの前Event.を追加する必要があります同じ名前の列があります)

関連する問題