AÑADIR INSEET a la consulta de selección de valores que faltan

user3580480:

Tengo la siguiente tabla simplificada.

|---------------------|------------------|------------------|
|        month        |     customer     |      value       |
|---------------------|------------------|------------------|
|          1          |        A         |        20        |
|---------------------|------------------|------------------|
|          1          |        B         |        20        |
|---------------------|------------------|------------------|
|          1          |        C         |        20        |
|---------------------|------------------|------------------|
|          2          |        A         |        20        |
|---------------------|------------------|------------------|
|          2          |        B         |        20        |
|---------------------|------------------|------------------|

Como se puede ver, no es de valor para el cliente C, por mes 2.

En este caso tengo que añadir programtically meses = '2' cliente = valor 'C' = '0', dentro de mi instrucción de selección

SELECT month, customer, value FROM mytable

Tengo muchas más filas en mi mesa real, pero el resultado final tiene que ser la misma lista de clientes para cada mes.

Cualquier ayuda muy apreciada.

Gordon Linoff:

Use una cross joinpara generar las filas y una left joinpara traer los valores:

select m.month, c.customer, coalesce(t.value, 0) as value
from (select distinct month from t) m cross join
     (select distinct customer from t) c left join
     t
     on t.month = m.month and t.customer = c.customer;

Nota: Si usted tiene otras fuentes para los meses o los clientes, a continuación, los que son probablemente más rápido que usar count(distinct).

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=392659&siteId=1
Recomendado
Clasificación