SQL - Condulta difícil

   
Vista:

Condulta difícil

Publicado por pergon (5 intervenciones) el 08/09/2011 16:34:50
Hola que tal?

Tengo un problema. Me han pedido que realice una query con dos tablas. Bien, en una tabla tengo


Cod Transportista (2)

En otra tabla tengo la información de los transportistas

cod transportista (6)
nombre del transportista (50)

Como ven los campos por los que tengo que enlazar son de distinta estructura. Los ficheros son viejos y con mucha información, por lo que no es viable cambiarlos.
¿Podrían decirme como se podría hacer una Select con union de estos 2 campos?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Condulta difícil

Publicado por leonardo_josue (877 intervenciones) el 08/09/2011 17:12:03
Hola pergon:

La información que no es suficiente como para darte un diagnóstico definitivo de tu situación, por ejemplo no nos dices qué tipo de consulta es la que necesitas hacer, si tienes que hacer un INNER JOIN o pudieras hacerla con UNION.

deberías comenzar por decirnos si tus campos Cod Transportista guardan alguna relación, si el problema es sólo con las longitudes de los campos, pero la información es en esencia la misma entonces podrías usar funciones de cadena para tratar de ligar las tablas, es decir, si en una de tus tablas tienes Cod Transportista = 'DS' y en tu otra tabla tenes 'DWR-DS' donde los últimos dos caracteres corresponden a la clave de la otra tabla, bastaría con utilizar una función SUBSTRING (esto es solo un ejemplo de lo que puedes tener, puede no asemejarse en nada a lo que tienes).

Si por ejemplo necesitas hacer un UNION entre tus tablas, lo único que debes hacer es castear o convertir el tipo de dato de tus columnas para que queden todas de la misma longitud.

Trata de ampliar la información acerca de tu problema. puedes por ejemplo poner algunos datos de ejemplo de cada una de tus tablas y decirnos qué es lo que quieres obtener como salida, para poder plantearte alguna alternativa.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por pergon (5 intervenciones) el 08/09/2011 17:21:13
Hola Leo, gracias por tu ayuda.

Efectivamente lo que quiero hacer es una select con INNER Join de los 2 campos. Solo que ahora me da error porque dice que los campos son de estructuras distintas.

Tabla Albaranes
Cod. Albaran
linea Albaran
Articulo
Fecha
Transportista ( 2, numérico)

Tabla Transportista

Cod. Transportista (8, texto)
Nombre

Lo que quiero mostrar es toda la información de la tabla albares pero añadirle también el nombre del transportista.

Mcuhas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por leonardo_josue (877 intervenciones) el 08/09/2011 17:31:20
Hola de nuevo...

Si la información en tu campo sigue siendo la misma lo único que tienes que hacer es el casteo o conversión, para que ambos campos sean del mismo tipo. Como manejas numeros y texto es conveniente que conviertas a texto, pues hacerlo a la inversa (convertir el texto a numero) podría traer problema dependiendo de la información que tenga tu tabla, no nos dices qué manejador de BD estás utilizando, pero sería más o menos así

Select * from Albaranes A INNER JOIN Transportista T
ON Cast(A.Transportista as VARCHAR(8)) = T.Cod_Transportista

dale un vistazo para ver si es más o menos lo que necesitas

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por pergon (5 intervenciones) el 08/09/2011 17:37:49
Gracias por tus aportes,

Voy a probar y te comento.

Muchas gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por pergon (5 intervenciones) el 09/09/2011 09:39:08
Hola que tal?
He estado probando y nada de nada.
La base de datos es As/400.
Me da error de sintaxis en la sentencia CAST, es como si no la aceptase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por leonardo_josue (877 intervenciones) el 09/09/2011 16:21:46
Hola pergon:

Nunca he trabajado con AS/400, por lo que no sé cual sea la función que utilice para convertir datos, por lo que te tocará investigar por tu cuenta.

La mayoría, sino es que todos los DBMS manejan funciones para conversión de tipos de datos, por lo que sólo es cuestión de encontrar la función correcta.

Y como última recomendación, siempre que una consulta te marque algún error POSTEA EL CODIGO SQL Y EL CODIGO DEL ERROR, de esta manera será más fácil que alguien con el conocimiento del tema pueda ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condulta difícil

Publicado por pergon (5 intervenciones) el 12/09/2011 11:19:39
Buenos días Leo,

He conseguido ejecutar correctamente la sentencia SQL desde Access, sacando todos los datos correctamente. Pero el problema que se me presenta es que si esa sentencia la introduzco en .NET no me saca ningún dato.

La sentencia es:

SELECT QS36F_ALBCH2.ÑWCODC, QS36F_ALBCH2.ÑWTRAS, QS36F_ALBCH2.ÑWTRAS, QS36F_BTABLA.ALCELE, QS36F_BTABLA.ALDESC, QS36F_BTABLA.ALCTAB
FROM QS36F_BTABLA, (QS36F_ALBCH2 INNER JOIN QS36F_ALBDH ON (QS36F_ALBCH2.ÑWFALB = QS36F_ALBDH.ÑXFALB) AND (QS36F_ALBCH2.ÑWNALB = QS36F_ALBDH.ÑXNALB)) INNER JOIN QS36F_MARTIC ON (QS36F_ALBDH.ÑXCODI = QS36F_MARTIC.KKCODI) AND (QS36F_ALBDH.ÑXCCAR = QS36F_MARTIC.KKCCAR) AND (QS36F_ALBDH.ÑXCOPC = QS36F_MARTIC.KKCOPC) AND (QS36F_ALBDH.ÑXCVOL = QS36F_MARTIC.KKCVOL)
WHERE (((QS36F_ALBCH2.ÑWCODC)=148006) AND [i]((QS36F_ALBCH2.ÑWTRAS)=Val([ALCELE])) AND ((QS36F_ALBCH2.ÑWFALB)=20110906) AND ((QS36F_BTABLA.ALCTAB)="TRANSPOR"))

No entiendo porqué desde Access me saca los datos y desde .NET no saca nada. No muestra ningún fallo en la sentencia, tan solo que no saca dato alguno.

Muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar