Ayuda con consulta...

03/01/2008 - 18:56 por Pepe | Informe spam
Una pregunta grupo

tengo dos tablas A y B , como puedo hacer una consulta que me devuelva
informacion de la tabla A y un campo fijo de la tabla B haciendo una JOIN
entre ambas por unos campos especificos cuando se cumpla un criterio que
puede ser distinto para cada registro

Ej:

TABLA A

ID TIPO NOMBRE REL1 REL2
1 A1 JUAN 55 26
3 B2 LUIS 73 54
..

TABLA B

ID PORCENTAJE REL1 REL2
1 33 55 33
2 55 86 54
...

Lo que me gustaria es poder hacer una Join teniendo en cuenta que si en
campo TIPO es A1 se haga la JOIN entre las tablas por el campo REL1 y si
TIPO es B2 se haga la JOIN por el campo REL2

de manera que segun esto devolveria

1 A1 JUAN 33%
2 B2 LUIS 55%


En realidad no solo hay 2 tipos sino que habra varios de la misma manera que
habra distintos campos por los que se podran combinar.. de manera que no me
sirve hacer dos Joins y unirlas ya que este ejemplo es simplficado respecto
al verdadero.

No se si me he explicado con claridad..

Gracias de antemano por la ayuda!!

Preguntas similare

Leer las respuestas

#1 Isaias
03/01/2008 - 19:51 | Informe spam
Pepe

Segun veo, de acuerdo a tu explicacion y resultado esperado, NO estas
controlando el JOIN por los campos, simplemente, decides que valor MOSTRAR de
REL1 y REL2

De ser asi, entonces es un simple CASE

SELECT CASE WHEN TIPO = 'A1' THEN REL1 ELSE REL2 END

¿Es asi?
Saludos
IIslas


"Pepe" wrote:

Una pregunta grupo

tengo dos tablas A y B , como puedo hacer una consulta que me devuelva
informacion de la tabla A y un campo fijo de la tabla B haciendo una JOIN
entre ambas por unos campos especificos cuando se cumpla un criterio que
puede ser distinto para cada registro

Ej:

TABLA A

ID TIPO NOMBRE REL1 REL2
1 A1 JUAN 55 26
3 B2 LUIS 73 54
...

TABLA B

ID PORCENTAJE REL1 REL2
1 33 55 33
2 55 86 54


Lo que me gustaria es poder hacer una Join teniendo en cuenta que si en
campo TIPO es A1 se haga la JOIN entre las tablas por el campo REL1 y si
TIPO es B2 se haga la JOIN por el campo REL2

de manera que segun esto devolveria

1 A1 JUAN 33%
2 B2 LUIS 55%


En realidad no solo hay 2 tipos sino que habra varios de la misma manera que
habra distintos campos por los que se podran combinar.. de manera que no me
sirve hacer dos Joins y unirlas ya que este ejemplo es simplficado respecto
al verdadero.

No se si me he explicado con claridad..

Gracias de antemano por la ayuda!!






Respuesta Responder a este mensaje
#2 Pep Lopez
03/01/2008 - 20:44 | Informe spam
Hola Isaias,

ante tod gracias per no ...no es eso... te comento.
El caso es que tengo dos tablas ( A y B )que tengo que unir pero para cada
registro de la tabla A tengo que unirlo con la tabla B por un campo u otro,
es decir que no todos los registros se unen mediante la misma relacion sino
que en funcion de un campo TIPO tengo que unir por un campo u otro y no
se si esto se puede hacer de alguna manera dinamicamente.. o tengo que hacer
UNIONS de varias JOINS ( una por cada tipo de union que tengo ) o tengo que
montar un cursor y recorrer registro a registro y mediante CASES hacer JOINS
y meter el resultado en una tabla temporal ... o no se...



"Isaias" escribió en el mensaje
news:
Pepe

Segun veo, de acuerdo a tu explicacion y resultado esperado, NO estas
controlando el JOIN por los campos, simplemente, decides que valor MOSTRAR
de
REL1 y REL2

De ser asi, entonces es un simple CASE

SELECT CASE WHEN TIPO = 'A1' THEN REL1 ELSE REL2 END

¿Es asi?
Saludos
IIslas


"Pepe" wrote:

Una pregunta grupo

tengo dos tablas A y B , como puedo hacer una consulta que me devuelva
informacion de la tabla A y un campo fijo de la tabla B haciendo una JOIN
entre ambas por unos campos especificos cuando se cumpla un criterio que
puede ser distinto para cada registro

Ej:

TABLA A

ID TIPO NOMBRE REL1 REL2
1 A1 JUAN 55 26
3 B2 LUIS 73 54
...

TABLA B

ID PORCENTAJE REL1 REL2
1 33 55 33
2 55 86 54


Lo que me gustaria es poder hacer una Join teniendo en cuenta que si en
campo TIPO es A1 se haga la JOIN entre las tablas por el campo REL1 y si
TIPO es B2 se haga la JOIN por el campo REL2

de manera que segun esto devolveria

1 A1 JUAN 33%
2 B2 LUIS 55%


En realidad no solo hay 2 tipos sino que habra varios de la misma manera
que
habra distintos campos por los que se podran combinar.. de manera que no
me
sirve hacer dos Joins y unirlas ya que este ejemplo es simplficado
respecto
al verdadero.

No se si me he explicado con claridad..

Gracias de antemano por la ayuda!!






Respuesta Responder a este mensaje
#3 Isaias
03/01/2008 - 21:17 | Informe spam
Bueno, es claro que si quieres gobernar los JOIN'S dinamicamente, en una
misma instruccion, lo veo IMPOSIBLE de lograrlo.
Saludos
IIslas


"Pep Lopez" wrote:

Hola Isaias,

ante tod gracias per no ...no es eso... te comento.
El caso es que tengo dos tablas ( A y B )que tengo que unir pero para cada
registro de la tabla A tengo que unirlo con la tabla B por un campo u otro,
es decir que no todos los registros se unen mediante la misma relacion sino
que en funcion de un campo TIPO tengo que unir por un campo u otro y no
se si esto se puede hacer de alguna manera dinamicamente.. o tengo que hacer
UNIONS de varias JOINS ( una por cada tipo de union que tengo ) o tengo que
montar un cursor y recorrer registro a registro y mediante CASES hacer JOINS
y meter el resultado en una tabla temporal ... o no se...



"Isaias" escribió en el mensaje
news:
> Pepe
>
> Segun veo, de acuerdo a tu explicacion y resultado esperado, NO estas
> controlando el JOIN por los campos, simplemente, decides que valor MOSTRAR
> de
> REL1 y REL2
>
> De ser asi, entonces es un simple CASE
>
> SELECT CASE WHEN TIPO = 'A1' THEN REL1 ELSE REL2 END
>
> ¿Es asi?
> Saludos
> IIslas
>
>
> "Pepe" wrote:
>
>> Una pregunta grupo
>>
>> tengo dos tablas A y B , como puedo hacer una consulta que me devuelva
>> informacion de la tabla A y un campo fijo de la tabla B haciendo una JOIN
>> entre ambas por unos campos especificos cuando se cumpla un criterio que
>> puede ser distinto para cada registro
>>
>> Ej:
>>
>> TABLA A
>>
>> ID TIPO NOMBRE REL1 REL2
>> 1 A1 JUAN 55 26
>> 3 B2 LUIS 73 54
>> ...
>>
>> TABLA B
>>
>> ID PORCENTAJE REL1 REL2
>> 1 33 55 33
>> 2 55 86 54
>>
>>
>> Lo que me gustaria es poder hacer una Join teniendo en cuenta que si en
>> campo TIPO es A1 se haga la JOIN entre las tablas por el campo REL1 y si
>> TIPO es B2 se haga la JOIN por el campo REL2
>>
>> de manera que segun esto devolveria
>>
>> 1 A1 JUAN 33%
>> 2 B2 LUIS 55%
>>
>>
>> En realidad no solo hay 2 tipos sino que habra varios de la misma manera
>> que
>> habra distintos campos por los que se podran combinar.. de manera que no
>> me
>> sirve hacer dos Joins y unirlas ya que este ejemplo es simplficado
>> respecto
>> al verdadero.
>>
>> No se si me he explicado con claridad..
>>
>> Gracias de antemano por la ayuda!!
>>
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
03/01/2008 - 23:37 | Informe spam
Hola Pepe,

On 3 jan, 20:44, "Pep Lopez" wrote:
Hola Isaias,

ante tod gracias per no ...no es eso... te comento.
El caso es que tengo dos tablas ( A y B )que tengo que unir pero para cada
registro de la tabla A tengo que unirlo con la tabla B por un campo u otro,
es decir que no todos los registros se unen mediante la misma relacion sino
que en funcion de un campo TIPO tengo que unir por un campo u otro y no
se si esto se puede hacer de alguna manera dinamicamente.. o tengo que hacer
UNIONS de varias JOINS ( una por cada tipo de union que tengo ) o tengo que
montar un cursor y recorrer registro a registro y mediante CASES hacer JOINS
y meter el resultado en una tabla temporal ... o no se...




Entiendo que solo puedes tener 2 referencias (A.REL1 <-> B.REL1 y
A.REL2 <-> B.REL2) y que los A.TIPO ('A1', 'B2') pueden ser mas de
dos pero todos estos tipos (o solo algunos) tendrán que utilizar
una de las dos referencias posibles.
No va a ser posible hacerlo si no está en algún sitio registrado
para cada tipo que referencias se deben usar.

Te propongo lo siguiente:

Crea una tabla TIPOREL

TIPO REL
A1 1
B2 2
C1 1
C3 2

En esta tabla pones todos los tipos para los que existe la
referecia y cual (1 para REL1 y 2 para REL2).
He añadido C1 y C3 para indicar como entiendo yo que tienes
mas tipos y REL solo puede ser 1 o 2.

Ahora no necesitas SQL dinámico porque todos los posibles
tipos y que referencia deben usar están en la tabla TIPOREL.

Aquí tienes la consulta:

SELECT
B.ID, A.TIPO, A.NOMBRE, B.PORCENTAGE
FROM
A
JOIN TIPOREL R ON A.TIPO=R.TIPO
JOIN B ON
CASE R.REL
WHEN 1 THEN A.REL1
WHEN 2 THEN A.REL2
ELSE NULL
END CASE R.REL
WHEN 1 THEN B.REL1
WHEN 2 THEN B.REL2
ELSE NULL
END

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Pepe
04/01/2008 - 09:11 | Informe spam
Hola Carlos,
garcias por tu ayuda, voy a hacer pruebas con lo que comentas a ver si me
salgo.. aunque la realidad es un poco mas complicada porque hay mas campos
para hacer la Join y en algunos casos se utiliza mas de un campo para hacer
la Join... pero voy a ver si puedo montar una estructura basandome en lo que
comentas..

Gracias de nuevo a todos


"Carlos M. Calvelo" escribió en el mensaje
news:
Hola Pepe,

On 3 jan, 20:44, "Pep Lopez" wrote:
Hola Isaias,

ante tod gracias per no ...no es eso... te comento.
El caso es que tengo dos tablas ( A y B )que tengo que unir pero para cada
registro de la tabla A tengo que unirlo con la tabla B por un campo u
otro,
es decir que no todos los registros se unen mediante la misma relacion
sino
que en funcion de un campo TIPO tengo que unir por un campo u otro y
no
se si esto se puede hacer de alguna manera dinamicamente.. o tengo que
hacer
UNIONS de varias JOINS ( una por cada tipo de union que tengo ) o tengo
que
montar un cursor y recorrer registro a registro y mediante CASES hacer
JOINS
y meter el resultado en una tabla temporal ... o no se...




Entiendo que solo puedes tener 2 referencias (A.REL1 <-> B.REL1 y
A.REL2 <-> B.REL2) y que los A.TIPO ('A1', 'B2') pueden ser mas de
dos pero todos estos tipos (o solo algunos) tendrán que utilizar
una de las dos referencias posibles.
No va a ser posible hacerlo si no está en algún sitio registrado
para cada tipo que referencias se deben usar.

Te propongo lo siguiente:

Crea una tabla TIPOREL

TIPO REL
A1 1
B2 2
C1 1
C3 2

En esta tabla pones todos los tipos para los que existe la
referecia y cual (1 para REL1 y 2 para REL2).
He añadido C1 y C3 para indicar como entiendo yo que tienes
mas tipos y REL solo puede ser 1 o 2.

Ahora no necesitas SQL dinámico porque todos los posibles
tipos y que referencia deben usar están en la tabla TIPOREL.

Aquí tienes la consulta:

SELECT
B.ID, A.TIPO, A.NOMBRE, B.PORCENTAGE
FROM
A
JOIN TIPOREL R ON A.TIPO=R.TIPO
JOIN B ON
CASE R.REL
WHEN 1 THEN A.REL1
WHEN 2 THEN A.REL2
ELSE NULL
END CASE R.REL
WHEN 1 THEN B.REL1
WHEN 2 THEN B.REL2
ELSE NULL
END

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida