greatfung:
Me gustaría tener una mesa capaz de almacenar valores específicos del equipo, si no hay registro encontrado, se le devolverá el registro por defecto.
Nombre_tabla: Productos
ProdID ProdName Team
1 AAA <NULL>
1 AAA_T1 T1
2 BBB <NULL>
3 CCC <NULL>
3 CCC_T1 T1
3 CCC_T2 T2
4 DDD <NULL>
4 DDD_T3 T3
Para la consulta, el equipo tendrá que pasar en, se devolverán todos los productos.
equipo T1
ProdID ProdName
1 AAA_T1
2 BBB
3 CCC_T1
4 DDD
equipo T2
ProdID ProdName
1 AAA
2 BBB
3 CCC_T2
4 DDD
equipo T3
ProdID ProdName
1 AAA
2 BBB
3 CCC
4 DDD_T3
¿Cómo logro esto? ¿Es necesario cambiar la estructura de la tabla?
pasarán;
con NOT EXISTS
:
select distinct p.prodname
from products p
where p.team = 'T1'
or (
p.team is null
and not exists (
select 1 from products
where prodid = p.prodid and team = 'T1'
)
)
Usted puede quitar distinct
si no hay duplicados.
Vea la demostración .
O con la agregación condicional:
select max(case when team = 'T1' or team is null then prodname end) prodname
from products
group by prodid
Vea la demostración .
resultados:
> | prodname |
> | :------- |
> | AAA_T1 |
> | BBB |
> | CCC_T1 |
> | DDD |