¿Alguien puede ayudarme con la consulta SQL?

Tengo similares estas tablas

TABLA 1:

id_table1    ean    date_from      date_to     type     region      consumption 
  1          1234   2020-01-01    2021-01-01   blue      big          20000
  2          5678   2020-01-01    2021-01-01   blue      big2         80000
  2          6845   2020-01-01    2021-01-01   white    small         10000

TABLA 2:

id_table2        day      hour     type_blue_big_coefficient   type_blue_big2_coefficient  type_white_coefficient
  1          2020-01-01     1             0.011120                0.32652                     0.054165
  2          2020-01-01     2             0.023265                0.12543                     0.054165

Y necesito mostrar un resultado como este:

EAN         Day           Hour     consumption  
1234     2020-01-01        1          222.4
5678     2020-01-01        1          26 121.6
6845     2020-01-01        1           541.65

El consumo de producción se calcula multiplicando el coeficiente de la tabla 2 y el consumo de la tabla 1. Hay muchas variables calculadas por tipo y región de la tabla 1. En la vista resultante, necesito mostrar todos los EAN en la TABLA 1 divididos por día y hora con el consumo de todas las horas.

Alguien sabe como hacerlo ?

/////// ACTUALIZAR

Gracias @Gordon Linoff por su ayuda. Ahora tengo un problema con la velocidad de consulta. En la tabla 1 hay unos 40000 registros y en la tabla 2 unos 8000 registros.

Consulta en ejecución durante una hora sin terminar ... con pocos registros todos funcionando bien. Probado en 2 servidores. Aquí está el enlace para la consulta de trabajo en db

1
Milan Lidmila 28 jul. 2020 a las 15:16

1 respuesta

La mejor respuesta

Creo que quieres:

select t1.ean, t1.day, t2.hour,
       sum(case when t1.type = 'blue' and region = 'big' then t2.type_blue_big_coefficient * t1.consumption
                when t1.type = 'blue' and region = 'big2' then t2.type_blue_big2_coefficient * t1.consumption
                when t1.type = 'white' then t2.type_white_coefficient * t1.consumption
                else 0
           end) as consumption                
from table1 t1 join
     table2 t2
     on t1.ean = t2.ean and t1.day = t2.day
group by t1.ean, t1.day, t2.hour;

Realmente debería arreglar su modelo de datos. Almacenar los valores de los coeficientes en columnas separadas en table2 es un anti-patrón. Esos realmente deberían estar en filas separadas, por lo que puede unir las tablas en las claves apropiadas.

Aquí hay un violín <> db.

2
Gordon Linoff 28 jul. 2020 a las 14:06