![](/img/trans.png)
[英]SQL Server 2008: how to write query for multiple columns in select and in group by only 1 column
[英]SQL Server - Select multiple Columns Group By 1 Column
我看了很多选择许多列的示例,但仅按1列分组,我的似乎给了我重复的结果。 参见下文,我想选择表中的所有列,但只希望GROUP BY
VehicleId
。 在屏幕截图上,您将看到结果实际上未按VehicleId
分组。
有什么想法我做错了吗?
尝试1:
SELECT
h.*,
TotalFines = 1,
TotalIncidents = 1,
TotalVehicleAllocations = 1,
TotalVehicleConditions = 1,
TotalMileageApplications = 1
FROM
(
SELECT h1.VehicleId FROM [dbo].[VehicleHistory] h1 GROUP BY h1.VehicleId
) GroupedList
INNER JOIN [dbo].[VehicleHistory] h ON GroupedList.VehicleId=h.VehicleId
ORDER BY
h.VehicleId;
尝试2:
SELECT t1.* FROM VehicleHistory t1
INNER JOIN
(
SELECT VehicleId FROM VehicleHistory GROUP BY VehicleId
) t2
ON t1.VehicleId=t2.VehicleId
这两个查询产生的结果相同,每个VehicleId重复行,如下所示:
以下是我的预期结果。 结果是由实体框架产生的查询。 但我想将linq查询重写为T-SQL:
这是因为您正在子查询中进行分组(这与SELECT DISTINCT h1.VehicleId FROM [dbo].[VehicleHistory] h1
):
SELECT h1.VehicleId FROM [dbo].[VehicleHistory] h1 GROUP BY h1.VehicleId
然后您要加入该列,这可能导致重复发生(您在VehicleHistory
有重复的ID)。
您需要做的只是:
SELECT VehicleId,
MAX(DateUpdated) DateUpdated, --or other aggregate function
--rest of your columns in appropriate aggreagte functions
FROM VehicleHistory
GROUP BY VehicleId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.