[英]SQL - 1 Column Twice in the SELECT Statement for different values
我用以下內容創建了“行程”數據庫
TripParent
TripDetails
StatusLog
讓我解釋一下這些表,首先,為了使其簡單起見,我隱藏了另一個字段,“ 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.