SQL-1列在SELECT语句中为不同的值设置两次
我创建了一个“trips”数据库,其中包含以下内容 三亲SQL-1列在SELECT语句中为不同的值设置两次,sql,sql-server,database,relationship,Sql,Sql Server,Database,Relationship,我创建了一个“trips”数据库,其中包含以下内容 三亲 身份证 驾驶公司 客户 TripDetails 身份证 目的地 计划到达日期 状态日志 身份证 CatStatusId(来自另一个仅包含名称的表) DateTimeModified 让我解释一下这些表,首先我隐藏了另一个字段以保持简单,“父”表有许多详细信息,因此它只是对它所具有的许多“详细信息”的总结。TripDetails表的1行对应1个目的地,假设旅行是从A到C,那么每个“站点”(A、B、C)都有一行。 然后我们得到了S
- 身份证
- 驾驶公司
- 客户
- 身份证
- 目的地
- 计划到达日期
- 身份证
- CatStatusId(来自另一个仅包含名称的表)
- DateTimeModified
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分组,我还需要显示所有行,通过这个查询,它不会显示没有“StatusLog”行的“TripDetails”,因为它们尚未到达
感谢您的帮助尝试以下方法:
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中。对日志条目使用左连接可以确保也可以获得没有相应日志的行
分组时,显示的每一列必须包含在GROUP BY子句中,或者包含在SELECT中的聚合函数中。因此,您必须考虑为什么要分组,是否要创建一个总和、计数等?>>相应地更改两个CASE列。谢谢,即使没有日志,左连接也会为我提供行。关于GROUP子句,即使我将TP.Id放在SELECT中,也会出现以下错误:“TP.DrivingCompany”列在SELECT列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。这是我的一个示例,最后两行应显示在1中,以将实际到达日期和实际出发日期放在一起参见更改的答案。