繁体   English   中英

SQL Server-选择多列按1列分​​组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM