Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

SubSelect sobre una única tabla en el Script

Hola a todos,

¿podríais echarme una mano en lo siguiente?. Tengo una tabla con los siguientes datos:

    

CODIGOCODIGO_POSTALDISTANCIA
COD00440072,3796
COD00440010,6359
COD0040020,5325
COD00440092,3283
COD00440060,8011
COD00440040,4038
COD00440050,6404
COD00440030,7786
COD00440084,6814
COD00540086,3962
COD00540021,8782
COD00540012,0394
COD00540061,8058
COD00540041,7062
COD00540093,4884
COD00540071,1111
COD00540032,5167
COD0054005

2,1624

y necesito seleccionar los registros que tengan de cada CODIGO_POSTAL la distancia menor. La sentencia SQL sería:

SELECT  a.CODIGO, a.CODIGO_POSTAL ,A.DISTANCIA

FROM DCP AS a

JOIN

     (SELECT CODIGO_POSTAL, Min(DISTANCIA) AS MínDeDISTANCIA

     FROM DCP

     WHERE CODIGO IN ('PAL004','PAL005')

     GROUP BY CODIGO_POSTAL) AS b

ON (a.CODIGO_POSTAL = b.CODIGO_POSTAL) AND (a.DISTANCIA = b.MínDeDISTANCIA);

¿Una vez cargada la tabla "DCP" cómo podría implementarlo en el Script de QlikView?

Por si es de ayuda los resultados parciales son los siguientes:

Subquery b  Resultado Final
CODIGO_POSTALDISTANCIA
40010,6359
40020,5325
40030,7786
40040,4038
40050,6404
40060,8011
40071,1111
40084,6814
40092,3283

 

CODIGOCODIGO_POSTALDISTANCIA
COD00440084,6814
COD00440040,4038
COD00440030,7786
COD00440020,5325
COD00440060,8011
COD00440010,6359
COD00440050,6404
COD00440092,3283
COD00540071,1111

Muchas gracias de antemano por vuestra ayuda.

Un saludo.

Ana

1 Solution

Accepted Solutions
sorrakis01
Specialist
Specialist

Hola Ana,

Viendo como lo tenías he hecho lo mismo cargando los datos desde un excel:

Temp_Tabla:

LOAD CODIGO,

     CODIGO_POSTAL,

     Num(DISTANCIA) as DISTANCIA

FROM

D:\Users\jarenasg\Desktop\Test_Query.xlsx

(ooxml, embedded labels, table is Sheet1);

Mi_Tabla:

NoConcatenate

load min(DISTANCIA) as DISTANCIA,

     CODIGO_POSTAL

Resident Temp_Tabla

GROUP BY CODIGO_POSTAL;

Left join

LOAD * RESIDENT Temp_Tabla;

Drop Tables Temp_Tabla;

Se me ha ocurrido esta manera, aunque quizás creo que se puede mejorat.

Otra opción que tendrías en SQL sería, hacer la subquery ordenándola por Codigo POstal y Distancia(Ascendente).

Luego la query hacer que siempre te coja el TOP 1 de cada Cdodigo Postal.

No sé es una idea, espero haberte ayudado.

Saludos,

View solution in original post

2 Replies
sorrakis01
Specialist
Specialist

Hola Ana,

Viendo como lo tenías he hecho lo mismo cargando los datos desde un excel:

Temp_Tabla:

LOAD CODIGO,

     CODIGO_POSTAL,

     Num(DISTANCIA) as DISTANCIA

FROM

D:\Users\jarenasg\Desktop\Test_Query.xlsx

(ooxml, embedded labels, table is Sheet1);

Mi_Tabla:

NoConcatenate

load min(DISTANCIA) as DISTANCIA,

     CODIGO_POSTAL

Resident Temp_Tabla

GROUP BY CODIGO_POSTAL;

Left join

LOAD * RESIDENT Temp_Tabla;

Drop Tables Temp_Tabla;

Se me ha ocurrido esta manera, aunque quizás creo que se puede mejorat.

Otra opción que tendrías en SQL sería, hacer la subquery ordenándola por Codigo POstal y Distancia(Ascendente).

Luego la query hacer que siempre te coja el TOP 1 de cada Cdodigo Postal.

No sé es una idea, espero haberte ayudado.

Saludos,

Not applicable
Author

Muchas gracias Jordi, funciona correctamente.