Запрос на возврат только уникального значения из последнего столбца - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть запрос, который возвращает все, как хотел.Но я не хочу дубликатов.Уже пробовал "группировать по", но я получаю точно такой же результат.

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

У вас есть две строки с Dell, так как вы использовали оператор distinct для eq.id.Таким образом, вы можете:

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
0 голосов
/ 26 февраля 2019

Вы получаете повторяющиеся строки, потому что у вас есть eq.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);
...