SQL Server - выберите несколько столбцов, сгруппированных по 1 столбцу - PullRequest
0 голосов
/ 07 июня 2019

Я просмотрел множество примеров выбора множества столбцов, но только группировка по 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

Оба запроса дают одинаковые результаты с дублирующимися строками для каждого идентификатора транспортного средства, как показано ниже:

enter image description here

Вот мои ожидаемые результаты ниже.Результатом является запрос, произведенный Entity Framework.Но я бы хотел переписать запрос linq в T-SQL:

enter image description here

1 Ответ

1 голос
/ 07 июня 2019

Это потому, что вы входите в подзапрос (который будет таким же, как SELECT DISTINCT h1.VehicleId FROM [dbo].[VehicleHistory] h1):

SELECT h1.VehicleId FROM [dbo].[VehicleHistory] h1 GROUP BY h1.VehicleId

и затем вы присоединяетесь к этому столбцу, что может привести к появлению дубликатов (у вас есть дубликаты идентификаторов в VehicleHistory).

Все, что вам нужно сделать, это:

SELECT VehicleId,
       MAX(DateUpdated) DateUpdated, --or other aggregate function
       --rest of your columns in appropriate aggreagte functions
FROM VehicleHistory
GROUP BY VehicleId
...