簡體   English   中英

SQL-SELECT語句中的1列兩次為不同的值

[英]SQL - 1 Column Twice in the SELECT Statement for different values

我用以下內容創建了“行程”數據庫

TripParent

  • ID
  • DrivingCompany
  • 客戶

TripDetails

  • ID
  • 目的地
  • PlannedArrivalDate

StatusLog

  • ID
  • CatStatusId(來自另一個帶有名稱的表)
  • DateTimeModified

讓我解釋一下這些表,首先,為了使其簡單起見,我隱藏了另一個字段,“ Parent”表具有許多TripDetails,因此它只是其中許多“ Details”的摘要。 TripDetails表將其1行表示為1個目的地,假設Trip從A到C,那么每個“停靠點”(A,B,C)都有一行。 然后,我們得到了StatusLog表,其中每個“ TripDetails”都有許多行。

問題是,我需要一個存儲過程,該存儲過程返回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

使用CASE是否是在SELECT語句中兩次顯示同一列的正確方法? 我認為我的工作是正確的,但是我無法按TP.Id分組,因此我還需要顯示所有行,並通過此查詢進行查詢,它不會顯示沒有“ TripDetails”的“ StatusLog”行,因為它們尚未到達。

任何幫助表示贊賞

嘗試這個:

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

如果完美的話,他們會使用CASE。 您要分組的列必須包含在SELECT中。 使用LEFT JOIN作為日志條目可確保您還獲得沒有相應日志的行。

分組時,您顯示的每個列必須包含在GROUP BY子句中或包含在SELECT的聚合函數中。 因此,您必須考慮為什么要分組,是否要創建總和,計數...? >>相應地更改兩個CASE列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM