Pregunta

Tengo una consulta con las siguientes tablas (reducida para mostrar solo las columnas interesadas).

t1
code

t2
code, period, status

t3
period, desc

Ahora lo que tengo es,

t3 es una tabla de "períodos" únicos.

t1 es una tabla de códigos únicos.

t2 es la tabla de unión que une ambos, junto con un estado, en aras de este ejemplo status = (A, B, C).

Lo que estoy haciendo es crear un resultado de consulta que se agrupa por " punto " y tiene el recuento de 'códigos' en cada estado.

Eso es fácil de resolver, pero quiero extender esto a, es tener no solo un conteo de 'códigos en A, B y C, sino también un conteo de los códigos que AREN'T asoció con un período o en otras palabras, un recuento de los códigos que no están en t2 durante un período determinado.

Entonces, el resultado que estoy buscando es

Period    A    B    C   (Codes from t1 not found in t2)
P1        10   5    2   3
P2        5    5    5   10
¿Fue útil?

Solución

Puede usar la combinación cruzada para seleccionar una matriz de todos los códigos para todos los períodos. Eso le permite contar las filas que no están presentes:

select
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount,
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount,
    ...
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount
from       t1
cross join t3
left join  t2 
on         t2.code = t1.code and t2.period = t3.period
group by   t3.period
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top