查询 return 只是最后一列的唯一值

Query to return just unique value from last column

我有一个查询,returns 一切如愿以偿。但我不想重复。已经尝试 "group by" 但我得到完全相同的结果。

select distinct eq.id as id, tipo.descripcion as tipoId, eq.tagId, eq.periodoId, eq.asignado, op.numOpcion as empleadoId
from Empleados emp inner join dbo.Opciones op ON op.empleadoId = emp.id 
inner join dbo.TipoEquipo tipo ON tipo.id = op.tipoEquipoId 
inner join dbo.Equipos eq ON eq.tipoId = tipo.id
where emp.Id = 1 
order by op.numOpcion

我明白了。

id  tipoId  tagId   periodoId   asignado    empleadoId
1   Macbook tag1           1    Si             1
3   iMac    tag3           1    Si             2
5   Dell Lap OP tag5       1    No             3
6   Dell Lap OP tag6       1    No             3

正在尝试获得唯一性(empleadoId 的第一个值)。像这样。

id  tipoId  tagId   periodoId   asignado    empleadoId
1   Macbook tag1           1    Si             1
3   iMac    tag3           1    Si             2
5   Dell Lap OP tag5       1    No             3

谢谢。

你得到重复的行,因为你有一个 eq.id 具有唯一的 id,所以你可以删除它或使用 row_number() :

select top (1) with ties eq.id as id, tipo.descripcion as tipoId, eq.tagId, eq.periodoId, eq.asignado, op.numOpcion as empleadoId
from Empleados emp inner join 
     dbo.Opciones op 
     ON op.empleadoId = emp.id inner join 
     dbo.TipoEquipo tipo 
     ON tipo.id = op.tipoEquipoId inner join 
     dbo.Equipos eq 
     ON eq.tipoId = tipo.id
where emp.Id = 1 
order by row_number() over (partition by tipo.descripcion, eq.periodoId, eq.asignado, op.numOpcion order by eq.id desc);

你有两行 Dell,因为你对 eq.id 使用了运算符 distinct。 所以你可以:

select 
  tipo.descripcion as tipoId
, eq.tagId
, eq.periodoId
, eq.asignado
, op.numOpcion as empleadoId
from Empleados emp inner join dbo.Opciones op ON op.empleadoId = emp.id 
inner join dbo.TipoEquipo tipo ON tipo.id = op.tipoEquipoId 
inner join dbo.Equipos eq ON eq.tipoId = tipo.id
where emp.Id = 1
group by   tipo.descripcion
         , eq.tagId
         , eq.periodoId
         , eq.asignado
         , op.numOpcion 
order by op.numOpcion

或者只使用子查询然后 GROUP BY 没有 id:

select q.tipoId, q.tagId, q.periodoId, q.asignado, q.empleadoId
from
(
select 
distinct eq.id as id
, tipo.descripcion as tipoId
, eq.tagId
, eq.periodoId, 
eq.asignado, op.numOpcion as empleadoId
from Empleados emp inner join dbo.Opciones op ON op.empleadoId = emp.id 
inner join dbo.TipoEquipo tipo ON tipo.id = op.tipoEquipoId 
inner join dbo.Equipos eq ON eq.tipoId = tipo.id
where emp.Id = 1 
)q
group by q.tipoId, q.tagId, q.periodoId, q.asignado, q.empleadoId
order by q.empleadoId