查询 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
我有一个查询,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