这是我的代码
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
列'TblEquipment.EquipmentId'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
如果我不按照这样显示的结果使用group:
所以你可以看到装备ID 15是重复的......我只想要其中一个..我更喜欢顶级的,我的意思是更新的记录
请帮我怎么做?
答案 0 :(得分:1)
您正在使用Group By子句,因此您必须使用Aggregate函数 对于每个选择列,或者您必须使用“分组依据”中的列 条款
e.g
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`
答案 1 :(得分:0)
正如我在评论中提到的那样,您正在选择一堆non aggregated column's
并在group by
中只保留一个Sql Server
中不允许的内容。要删除重复的行,请使用row_number
窗口函数。
同时删除1=1
子句中不需要的where
条件。
如果没有错,这就是你要找的。 p>
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