2015-03-29 1 views
2

Это мой кодКак выбрать одну вершину каждой записи по идентификатору в Second Entry Table В SQL Server SELECT?

SELECT DISTINCT 
    E.EquipmentId, E.Name, E.KakhdaryNo, E.PropertyNo, 
    E.InstallationPlace, E.InstallationDate, E.BuyDate, 
    Vt.TypeCaption, E.VisitChosen, E.LastVisitDate, V.VisitReport 
FROM 
    TblEquipment E 
LEFT JOIN 
    TblVisitType Vt ON E.VisitType = Vt.VisitTypeId 
LEFT JOIN 
    TblVisit V ON E.EquipmentId = V.EquipmentId 
WHERE 
    1=1 
    AND E.Deleted <> 'True' 
GROUP BY 
    E.Name 

Я получаю сообщение об ошибке:

Msg 8120, Level 16, State 1, Line 1
Column 'TblEquipment.EquipmentId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Если я не использую группу по результату, показанному так:

This is result

Так как вы может видеть, что ID оборудования 15 дублируется .. и я просто хочу одного из них. Я предпочитаю верхний, я имею в виду более новую запись

Пожалуйста, помогите мне, как это сделать?

+1

Изображение не ясно, пожалуйста, добавить 'образец data' и' ожидаемый output'. Вы «выбираете» кучу «неагрегированных столбцов» и сохраняете только один в 'group by', который не разрешен в' Sql Server' –

ответ

1

Aa you are using Group By clause so you have to use Aggregate function for each selecting column or you have to use the column in Group By clause

например

select a,b,max(c),min(d) from table_Name group by a,b 

в вашем случае

SELECT 
Max(E.EquipmentId), 
E.Name, 
Max(E.KakhdaryNo), 
Max(E.PropertyNo), 
Max(E.InstallationPlace), 
Max(E.InstallationDate), 
Max(E.BuyDate), 
Max(Vt.TypeCaption), 
Max(E.VisitChosen), 
Max(E.LastVisitDate), 
Max(V.VisitReport) 
FROM 
TblEquipment E 
LEFT JOIN 
TblVisitType Vt 
on 
E.VisitType=Vt.VisitTypeId 
LEFT JOIN 
TblVisit V 
on 
E.EquipmentId=V.EquipmentId 
WHERE 1=1 AND E.Deleted <> 'True' 
Group BY E.Name` 
+0

Это становится Истиной ... можете ли вы, пожалуйста, описать меня почему? – AminAmiriDarban

0

Как я упомянул в комментарии, вы выбираете пучок non aggregated column's и сохраняете только один из group by, который не разрешен в Sql Server. Чтобы удалить повторяющиеся строки, используйте функцию окна row_number.

Также удалите 1=1 условие в пункте where, которое не требуется.

Если вы не ошибаетесь, это то, что вы ищете.

SELECT EquipmentId, 
     NAME, 
     KakhdaryNo, 
     PropertyNo, 
     InstallationPlace, 
     InstallationDate, 
     BuyDate, 
     .TypeCaption, 
     VisitChosen, 
     LastVisitDate, 
     VisitReport 
FROM (SELECT Row_number()OVER(partition BY E.EquipmentId ORDER BY order_by_column) AS RN, 
       E.EquipmentId, 
       E.NAME, 
       E.KakhdaryNo, 
       E.PropertyNo, 
       E.InstallationPlace, 
       E.InstallationDate, 
       E.BuyDate, 
       Vt.TypeCaption, 
       E.VisitChosen, 
       E.LastVisitDate, 
       V.VisitReport 
     FROM TblEquipment E 
       LEFT JOIN TblVisitType Vt 
         ON E.VisitType = Vt.VisitTypeId 
       LEFT JOIN TblVisit V 
         ON E.EquipmentId = V.EquipmentId 
     WHERE E.Deleted <> 'True') A 
WHERE RN = 1 
+0

. Я получил эту ошибку: Недопустимое имя столбца 'order_by_column' – AminAmiriDarban

+1

@ user1998368 - Например, я сохранил это имя. Вам нужно использовать один из существующих столбцов, в котором вам нужно найти 'top 1' –

Смежные вопросы