Hola a todos,
¿podríais echarme una mano en lo siguiente?. Tengo una tabla con los siguientes datos:
CODIGO | CODIGO_POSTAL | DISTANCIA |
COD004 | 4007 | 2,3796 |
COD004 | 4001 | 0,6359 |
COD00 | 4002 | 0,5325 |
COD004 | 4009 | 2,3283 |
COD004 | 4006 | 0,8011 |
COD004 | 4004 | 0,4038 |
COD004 | 4005 | 0,6404 |
COD004 | 4003 | 0,7786 |
COD004 | 4008 | 4,6814 |
COD005 | 4008 | 6,3962 |
COD005 | 4002 | 1,8782 |
COD005 | 4001 | 2,0394 |
COD005 | 4006 | 1,8058 |
COD005 | 4004 | 1,7062 |
COD005 | 4009 | 3,4884 |
COD005 | 4007 | 1,1111 |
COD005 | 4003 | 2,5167 |
COD005 | 4005 | 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Muchas gracias de antemano por vuestra ayuda.
Un saludo.
Ana
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,
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,
Muchas gracias Jordi, funciona correctamente.