Vamos por pasos.
Primero, podemos identificar todos los lotes que tienen exactamente dos materiales, valiéndonos de count(distinct )
, para obtener el número de distintos materiales que tiene cada lote, y agregar una cláusula having
para dejar en el resultado solamente aquellos que tienen exactamente dos materiales. En SQL, la consulta luciría así:
select lote, count(distinct material) contador
from Lotes
group by lote
having count(distinct material) = 2
Para lograr el resultado que buscas, entonces, podemos colocar esta consulta dentro de un CTE y hacer join
entre la tabla original y este resultado, para obtener los materiales de los lotes:
Por ejemplo:
;
with
DosMateriales as (
select lote, count(distinct material) contador
from Lotes
group by lote
having count(distinct material) = 2
)
select distinct l.Lote, l.Material
from Lotes l
inner join DosMateriales d on d.lote = l.lote
Esto nos devolverá el resultado que buscas:
Lote Material
---------- -----------
20082019 3021814
20082019 7000225
(2 rows affected)
Completion time: 2020-08-01T00:54:23.6145373-06:00