2017-06-07 24 views
0

我已經創建了 「旅行」 的數據庫具有以下SQL - 1列兩次在

TripParent

  • 編號
  • DrivingCompany
  • 客戶端的不同值的SELECT語句

TripDetails

  • 編號
  • 目標
  • PlannedArrivalDate

StatusLog

  • 編號
  • CatStatusId(從另一個表時逢用名)
  • DateTimeModified

讓我解釋一下表格,首先我隱藏了另外一些字段以保持簡單,「Parent」表具有許多TripDetails,所以它只是它的許多「Details」的摘要。 TripDetails爲1個目的地列出其1行,假設行程從A到C,然後每個「停止」(A,B,C)有一行。 然後我們得到了每個「TripDetails」都有許多行的StatusLog表。

問題是,我需要一個返回DrivingCompany,Client,PlannedArrivalDate,RealArrivalDate和RealDepartureDate的存儲過程。

「真實日期」來自StatusLog表。狀態1表示卡車已經到達目的地(A/B/C),狀態2表示它已經離開了所述位置。

到目前爲止,我得到了以下

SELECT 
    TP.DrivingCompany, TP.Client, TD.PlannedArrivalDate, 
    'Real Arrival Date' = CASE SL.CatStatusId 
          WHEN 1 THEN SL.DateTimeModified 
          ELSE NULL 
          END, 
    'Real Departure Date' = CASE SL.CatStatusId 
           WHEN 2 THEN SL.DateTimeModified 
           ELSE NULL 
          END 
FROM 
    TripParent TP 
JOIN 
    TripDetails TD ON TD.TripParentId = TE.Id 
JOIN 
    StatusLog SL ON SL.TripDetailsId = TD.Id 
GROUP BY 
    TP.Id 
ORDER BY 
    TD.Id 

是表示用案例在SELECT語句顯示同一列兩次正確的方法是什麼?我認爲我在正確的軌道上,但我不能通過TP.Id分組,並且我還需要顯示所有行,通過此查詢,它不顯示「TripDetails」沒有「 StatusLog「行,因爲它們還沒有到達。

任何幫助表示讚賞

回答

0

試試這個:

SELECT TP.Id, 
     TP.DrivingCompany, 
     TP.Client, 
     TD.PlannedArrivalDate, 
     'Real Arrival Date' = CASE SL.CatStatusId 
           WHEN 1 THEN SL.DateTimeModified 
           ELSE NULL 
          END, 
     'Real Departure Date' = CASE SL.CatStatusId 
           WHEN 2 THEN SL.DateTimeModified 
           ELSE NULL 
           END 
    FROM  TripParent TP 
     JOIN TripDetails TD ON TD.TripParentId = TE.Id 
    LEFT JOIN StatusLog SL ON SL.TripDetailsId = TD.Id 
GROUP BY TP.Id, 
      TP.DrivingCompany, 
      TP.Client, 
      TD.PlannedArrivalDate 
ORDER BY TD.Id 

他們的方式,你如果完全正常的使用情況,是的。您想分組的列必須包含在SELECT中。對日誌條目使用LEFT JOIN可確保您也獲得沒有相應日誌的行。

分組時,您顯示的每個列必須包含在GROUP BY子句中或SELECT中的聚合函數中。所以你必須考慮你爲什麼分組,你想創造一筆數額,計數,......? >>相應地更改兩個CASE列。

+0

謝謝,即使沒有日誌,LEFT JOIN的確給了我行。關於GROUP子句,即使我將TP.Id放入SELECT中,也會出現此錯誤: **選擇列表中的列'TP.DrivingCompany'無效,因爲它不包含在聚合函數或GROUP BY子句。** 這是我的[DATA](https://i.redd.it/vnlkrhhqgf2z.png) 的一個示例應該在1中顯示最後2行以將實際到達日期和真實出發日期 – Martin

+0

查看更改的答案。 – IngoB