我對這個問題的背景有很多解釋,所以請耐心等待。如何填寫缺失日期爲行並給出其他值? (例外情況)
在我的公司,我們有一個SQL Server數據庫,我正在管理工作室2014. 我們有一個名爲JobStatistics的表,它顯示在每個小時的間隔期間完成多少個作業。 The table looks like this
該站的領域基本上是不同的領域可以做的工作。
正如您所看到的,某些行缺少某些時間間隔,這是因爲該表充滿了數據。爲了填充這個表格,我們有一個運行的腳本查看另一個表格並聚合此間隔之間所有日期的作業數量。換句話說,如果沒有任何作業,將不會插入一行,因爲不會插入任何內容(從另一個表中沒有行來聚合任何作業)。
我想在這裏做的是填補這些額外的間隔0作爲工作量。因此,每天和每個車站總是會有24個時間間隔(小時)。最重要的是,我們已經設定了我們想實現的目標,並且我在另一個名爲JobstatisticsTargets的表中聲明瞭這些目標,您可以調用日曆表來加入Jobstatistics表。
The calender table looks like this
我已經嘗試做了向左或向右聯接,以便丟失的時間間隔將得到填充和喬布斯就至少得拿到NULL值,但加盟條款沒有做什麼,我希望它。
這是我試過的嘗試
SELECT a.[Station], a.[Interval], a.[Jobs], b.[28JPH], b.[35JPH] FROM [JobStatistics] a RIGHT JOIN [JobStatisticsTargets] b ON CONVERT(VARCHAR(10),a.Interval,108) = b.Interval WHERE DATEDIFF(DAY, a.Interval, GETDATE()) < 12 AND Station LIKE '138010' ORDER BY a.Station, a.Interval
的LEFT JOIN究竟一樣我希望正常的加入做,它不與NULL值附加任何間隔。 (查詢只是一個站和幾天,所以我可以輕鬆測試)
任何幫助,非常感謝。我會定期檢查這個主題,所以如果你有任何問題,一定要問任何關於上下文的問題,我會盡力解釋它!
編輯 一些幫助查詢現在看起來是這樣
SELECT a.[Station], b.[Interval], a.[Jobs], b.[28JPH], b.[35JPH] FROM [JobStatistics] a RIGHT JOIN [JobStatisticsTargets] b ON CONVERT(VARCHAR(10),a.Interval,108) = b.Interval AND CONVERT(VARCHAR(10),a.Interval,110) = CONVERT(VARCHAR(10),GETDATE(),110) AND Station LIKE '138010' ORDER BY b.Interval
,否則額外的行沒有什麼,我希望他們能在所有我今天的日期現在篩選。問題是我不知道填充我的電臺的簡單方法。我想我需要一個子查詢,還是有另一種方式?
現在的問題是,我不能爲不同的電臺做這個查詢。我希望爲代表的所有間隔每站24列,但我得到這個結果:
Station Interval Jobs 28JPH 35JPH NULL 00:30:00 NULL 0 0 NULL 01:30:00 NULL 0 0 NULL 02:30:00 NULL 0 0 NULL 03:30:00 NULL 0 0 134040 04:30:00 2 0 0 136060 04:30:00 2 0 0 131080 04:30:00 2 0 0 138010 05:30:00 2 0 0 NULL 06:30:00 NULL 0 0 NULL 07:30:00 NULL 28 35 NULL 08:30:00 NULL 28 35 ...
您需要使用正確的連接,因爲缺少的值在左邊的表上。 – artm
我試過了,這不會改變任何輸出。這就是爲什麼我有點困惑。這次加入並沒有達到我期望的水平。 – user7984494