SQL - problema con campos

   
Vista:

problema con campos

Publicado por jose manuel (5 intervenciones) el 05/08/2010 13:01:54
Hola buenos dias, estoy intentano hacer una sql con union pero no se como reolver el siguiente problema.
Tengo la siguiente consulta:
(select distinct sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j--,pfizer.salud_clientes sc
where sp.cproducto='0503240'
and j.mescon_n ='022009'
UNION
select distinct sp.cproducto,sp.dproducto,to_char(sc.ccliente)ccliente
from salud_productos_completa sp,pfizer.salud_clientes sc
where sp.cproducto='0503240') v_cliente_producto

Y necesito sacar dos campos de la tabla pfizer.salud_clientes sc, pero sin sacar mas datos de los que me muestra en eta consulta.Los campos son sc.ccliente_div,sc.dcliente_div.
Si realizo la siguiente consulta me devuelve miles de registros que no es lo que quiero y no se como sacarlos:
(select distinct sc.ccliente_div,sc.dcliente_div,sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j,pfizer.salud_clientes sc
where sp.cproducto='0503240'
and j.mescon_n ='022009'
UNION
-- ,
select distinct sc.ccliente_div,sc.dcliente_div,sp.cproducto,sp.dproducto,to_char(sc.ccliente)ccliente
from salud_productos_completa sp,pfizer.salud_clientes sc
where sp.cproducto='0503240')

Ademas de que poner en el union la tabla de pfizer.salud_clientes sc,estaria mal.
Por favor necesitaria ayuda si alguien me puede ayudar lo agradeceria.
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

RE:problema con campos

Publicado por Leonardo Josue (878 intervenciones) el 05/08/2010 16:39:45
Buenos días José Manuel, traté de entender cual es tu problema pero sinceramente no me quedó muy clara tu explicación. te pido por favor que primero menciones qué manejador de bd estás utilizando y en lugar de sus consultas coloques algún ejemplo de los datos que contienen tus tablas, así como de la salida que quieres obtener. creo que sería más fácil poder 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

RE:problema con campos

Publicado por jose manuel (5 intervenciones) el 06/08/2010 09:31:10
A ver manejador de bases de datos estoy ytilizando PL/SQL developper.vamos a ver datos que contienen las tablas voy a poner unos pocos a ver si me podeis ayudar.

A ver de la tabla salud_productos_completa tenemos el producto 0503240 que queremos sacar:
cproducto dproducto cmpg dmpg
0503240 0503240-SYNULOX RTU 6 X 100 ML 741 741-SYNULOX/CLAVAMOX RTU

De la tabla pah_espec_porcent_budget j tenemos producto,codigocliente,codigoespecie,mescon,porcetnaje,tenemos el mes para coincidir y el cproducto que buscamos
ejemplo de datos

cproducto codigocliente cespecie mescon porcentaje
A77 PAH999999 00 22009 0,100000
A77 PAH999999 01 22009 0,200000
A77 PAH999999 02 22009 0,300000
A77 PAH999999 03 22009 0,400000
009 PAH999999 00 22009 1,000000

de la tabla pfizer.salud_clientes, tenemos los clientes.el cliente 'PAH999999'es generico y no aparece en dicha tabla, solo aparce en la tabla de pah_espec_porcent_budget.
ccliente dcliente ccliente_div dcliente div
100032 100032-S.A.T. OBANOS 100032 100032-S.A.T. OBANOS
100057 100057-B-AGLOMISA 100057 100057-B-AGLOMISA
100099 100099-B-ASGAPIR 100099 100099-B-ASGAPIR

La salida que queremos obtener son los prodcutos de los clientes que coincidan con los filtros que son cproducto='0503240' y que el mes coincida con el mescon='022009'.
Los unicos campos que se pueden relacionar con las tablas son el cproducto que esta en la tabla de salud_prductos_completa y pah_especies_porcentajes_budget.
Por favor necesitaria ayuda,porque no me sale nada.
Tengo que sacar los campos ccliente_div,dcliente_divccliente de la tabla salud_producto_completa.
Hay que realizar un union para poder sacar el cliente generico.
Lo que yo he realizado es la consulta para sacar los prodcutos que es la siguiente:
select distinct sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j--,pfizer.salud_clientes sc
where sp.cproducto='0503240'
and j.mescon_n ='022009'
UNION

select distinct sp.cproducto,sp.dproducto,to_char(sc.ccliente)ccliente
from salud_productos_completa sp,pfizer.salud_clientes sc
where sp.cproducto='0503240'

Dandome los siguientes resultados:
......................................................

1162 0503240 0503240-SYNULOX RTU 6 X 100 ML 390158
1163 0503240 0503240-SYNULOX RTU 6 X 100 ML 390159
1164 0503240 0503240-SYNULOX RTU 6 X 100 ML 390160
1165 0503240 0503240-SYNULOX RTU 6 X 100 ML 390161
1166 0503240 0503240-SYNULOX RTU 6 X 100 ML 390162
1167 0503240 0503240-SYNULOX RTU 6 X 100 ML 390163
1168 0503240 0503240-SYNULOX RTU 6 X 100 ML 390164
1169 0503240 0503240-SYNULOX RTU 6 X 100 ML 390165
1170 0503240 0503240-SYNULOX RTU 6 X 100 ML 390166
1171 0503240 0503240-SYNULOX RTU 6 X 100 ML 390167
1172 0503240 0503240-SYNULOX RTU 6 X 100 ML 390168
1173 0503240 0503240-SYNULOX RTU 6 X 100 ML 390169
1174 0503240 0503240-SYNULOX RTU 6 X 100 ML 390170
1175 0503240 0503240-SYNULOX RTU 6 X 100 ML 390171
1176 0503240 0503240-SYNULOX RTU 6 X 100 ML 390172
1177 0503240 0503240-SYNULOX RTU 6 X 100 ML 390173
1178 0503240 0503240-SYNULOX RTU 6 X 100 ML 390174
1179 0503240 0503240-SYNULOX RTU 6 X 100 ML 390175
1180 0503240 0503240-SYNULOX RTU 6 X 100 ML 390176
1181 0503240 0503240-SYNULOX RTU 6 X 100 ML 390177
1182 0503240 0503240-SYNULOX RTU 6 X 100 ML 390178
1183 0503240 0503240-SYNULOX RTU 6 X 100 ML 390179
1184 0503240 0503240-SYNULOX RTU 6 X 100 ML 390180
1185 0503240 0503240-SYNULOX RTU 6 X 100 ML 390181
1186 0503240 0503240-SYNULOX RTU 6 X 100 ML 390182
1187 0503240 0503240-SYNULOX RTU 6 X 100 ML 390183
1188 0503240 0503240-SYNULOX RTU 6 X 100 ML 390184
1189 0503240 0503240-SYNULOX RTU 6 X 100 ML 390185
1190 0503240 0503240-SYNULOX RTU 6 X 100 ML 390186
1191 0503240 0503240-SYNULOX RTU 6 X 100 ML 390187
1192 0503240 0503240-SYNULOX RTU 6 X 100 ML 390188
1193 0503240 0503240-SYNULOX RTU 6 X 100 ML 390189
1194 0503240 0503240-SYNULOX RTU 6 X 100 ML 390190
1195 0503240 0503240-SYNULOX RTU 6 X 100 ML 390191
1196 0503240 0503240-SYNULOX RTU 6 X 100 ML 390192
1197 0503240 0503240-SYNULOX RTU 6 X 100 ML 390193
1198 0503240 0503240-SYNULOX RTU 6 X 100 ML 390194
1199 0503240 0503240-SYNULOX RTU 6 X 100 ML 390195
1200 0503240 0503240-SYNULOX RTU 6 X 100 ML 390196
1201 0503240 0503240-SYNULOX RTU 6 X 100 ML 390197
1202 0503240 0503240-SYNULOX RTU 6 X 100 ML 390198
1203 0503240 0503240-SYNULOX RTU 6 X 100 ML 390199
1204 0503240 0503240-SYNULOX RTU 6 X 100 ML 390200
1205 0503240 0503240-SYNULOX RTU 6 X 100 ML CLIENTE GENÉRICO

Espero me podais ayudar, un cordial saludo.
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

RE:problema con campos

Publicado por Leonardo Josue (878 intervenciones) el 06/08/2010 17:08:58
A ver José Manuel, vamos por partes... primero, como recomendación, cuando especifiques una lista de campos o de datos utilizar un separador diferente del espacio, por ejemplo | o # y segundo, el manejador de BD sería ORACLE no PL-SQL.

Sigo sin entender muy bien lo que necesitas, pero bueno, a ver que sale. Lo primero que leo es que tienes dos tablas

salud_productos_completa
pah_espec_porcent_budget

El primer paso sería unir estas dos tablas. En las consultas que colocaste no veo en ningún lugar que hagas la unión entre las tablas, por lo que es posible que se esté realizando un producto carteciano. Por lo que veo la única llave que tienen és el campo cproducto por lo que sería algo como esto

SELECT * FROM
salud_productos_completa spc
INNER JOIN pah_espec_porcent_budget pepb
ON pepb.cproducto = spc.cproducto
WHERE
spc.cproducto = '0503240'and
pepb.mescon='022009'

Ahora bien, en esta tabla resultante por lo que veo que mencionas del "CLIENTE GENÉRICO" existen claves de cliente que pueden existir en la tabla pfizer.salud_clientes y otros que no existen en esta tabla, correcto???

Para obtener los datos de los clientes que no existan en la tabla pfizer.salud_clientes deberías hacer algo como esto

SELECT * FROM
salud_productos_completa spc
INNER JOIN pah_espec_porcent_budget pepb
ON pepb.cproducto = spc.cproducto
WHERE
spc.cproducto = '0503240'and
pepb.mescon='022009' and
pepb.codigocliente not in
(
select ccliente from pfizer.salud_clientes
)

Para los clientes que SI EXISTEN EN LA TABLA pfizer.salud_clientes deberías entonces hacer algo como esto

SELECT * FROM
salud_productos_completa spc
INNER JOIN pah_espec_porcent_budget pepb
ON pepb.cproducto = spc.cproducto
INNER JOIN pfizer.salud_clientes pf ON
pf.ccliente = pepb.codigocliente
WHERE
spc.cproducto = '0503240'and
pepb.mescon='022009'

Esto es en lo que te puedo ayudar y dandote algunas recomendaciones.

1. Cuando tengas que unir dos o más tablas utiliza siempre la clausula JOIN, con todas las llaves
2. Trata de dividir tu problema en partes, tu post fue demaciado extenso y por lo mismo puede resultar muy complicado de entender, no importa que tengas que escribir 10 o veinte post para llegar a la solución.

Saludos.
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

RE:problema con campos

Publicado por jose manuel (5 intervenciones) el 09/08/2010 09:50:15
Muchas gracias pero he de comentarte algunas cosas en relacion a lo expuesto.
Tenemos 3 tablas no dos, es decir, tenemos las siguientes tablas:
salud_productos_completa sp
pah_espec_porcent_budget j
pfizer.salud_clientes sc.

La unica union disponible entre ellas, de dos de ellas mejor dicho es el campo cproducto.
Por lo tanto la union de las tablas seria por ese campo entre las tablas salud_productos_completa
pah_espec_porcent_budget j.

Lo de mencionar el "CLIENTE GENERICO" es que es un cliente ficticio que se saca del campo ccliente, cuando se encuentra el producto 0503240 de la tabla salud_productos_completa sp con fecha 022009 de la tabla pah_espec_porcent_budget.

Si realizo el join entre las tablas anteriormente descritas no me devulve ningun producto, y solamente me devuelve un registro realizando la consulta que expuse anteriormente que es la siguiente:

select distinct sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j
where sp.cproducto='0503240'
and j.mescon_n ='022009'.

En ningun caso, especificas lo que he puesto anteriormente de ccliente 'CLIENTE GENERICO'.

De todas formas gracias por la ayuda mostrada, intentare darle mas vueltas con lo que me has intentado solucionar.Un cordial saludo.
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

RE:problema con campos

Publicado por jose manuel (5 intervenciones) el 10/08/2010 09:10:31
Bueno pues he conseguido realizar una select con un lion entre dos tablas, teniendo resultados, lo que no consigo es sacar los capos que quiero sacar.
¿Alguien me puede ayudar? Aqui os dejo la consulta:

select distinct sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j
where sp.cproducto='0503240'
and sp.cmpg=j.cproducto
and j.mescon_n ='022009'
UNION

select distinct sp.cproducto,sp.dproducto,to_char(sc.ccliente)ccliente
from salud_productos_completa sp,pfizer.salud_clientes sc
where sp.cproducto='0503240'

Lo que quiero es sacar los campos ccliente_div,dcliente_div DE LA TABLA pfizer.salud_clientes sc sin tener que utilizar la tabla en las dos select, dado que sino estaria mal realizado.

Un saludo y espero alguna respuesta...
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

RE:problema con campos

Publicado por Leonardo Josue (878 intervenciones) el 11/08/2010 22:26:43
Hola de nuevo josé manuel, veo que hay pasado varios días y nadie ha contestado a tu pregunta, en mi caso sigo sin entener qué es lo que necesitas. Veo que siempre llegas como resultado a la misma consulta es decir una UNION entre dos subconsultas. ¿Qué te falta?, ¿por qué está mal?

En uno de los post te comentaba que es mejor utilizar INNER JOIN para hacer la unión entre las tablas, cosa que no haz hecho,

SELECT DISTINCT
sp.cproducto,
sp.dproducto,
'CLIENTE GENÉRICO' as ccliente
FROM
salud_productos_completa sp
INNER JOIN pah_espec_porcent_budget j ON sp.cmpg = j.cproducto
WHERE
sp.cproducto='0503240' and
j.mescon_n ='022009'

Esto sería compatible con la primer parte de tu UNION, pero no entiendo por qué colocas todos los registros como 'CLIENTE GENÉRICO', ¿qué no se supone que algunos cclientes deberían de existir en la tabla pfizer.salud_clientes?

Ahora bien, con respecto a la segunda parte:

SELECT DISTINCT
sp.cproducto,
sp.dproducto,
to_char(sc.ccliente) as ccliente
FROM
salud_productos_completa sp,
pfizer.salud_clientes sc
WHERE sp.cproducto='0503240'

Esto realiza un producto carteciano entre las dos tablas debido a que no utilizas ninguna condición de union, ¿esto es correcto? es decir, ¿no tienes ningún campo que relaciones las tablas salud_productos_completa y pfizer.salud_clientes?

Si te explicas un poco mejor tal vez sea posible poder 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

RE:problema con campos

Publicado por jose manuel (5 intervenciones) el 13/08/2010 09:38:30
Hola de nuevo leo, te respondo para entener qué es lo que necesito.
vamos a ver no es qu eeste mal lo que me envias, ero lo he probado y no me detecta ni un solo registro, por lo tanto no em realiza lo que quiero y de la manera que lo expongo pues si me lo recibe.

Realice un psotoi con un join entre tablas pero sin poner las clausulas que pones tu ahi, quedando de la siguiente form la primera parte de la consulta:

select distinct sp.cproducto,sp.dproducto,'CLIENTE GENÉRICO'ccliente
from salud_productos_completa sp,pah_espec_porcent_budget j--,pfizer.salud_clientes sc
where sp.cproducto='0503240'
and sp.cmpg=j.cproducto
and j.mescon_n ='022009'

Vamos a ver coloco cliente generico, porque lo que aparece en el campo ese quiero que aparezca cliente generico, nada mas, y eso me devulelve solamente un registro, que es lo qu eme debe de devolver.

Ahora bien, con respecto a la segunda parte, lo que tengo que sacar, dado que no existe ninguna relacion entre las tablas, deberia de sacarme el producto cartesiano, con lo cual es la unica forma que veo para sacar los datos.Con lo cual quedamos en las mismas.

select distinct sp.cproducto,sp.dproducto,to_char(sc.ccliente)ccliente
from salud_productos_completa sp,pfizer.salud_clientes sc
where sp.cproducto='0503240

Lo que quiero realizar es pder sacar los campos sc.ccliente_div,sc.dcliente_div de la tabla pfizer.salud_clientes sc, con los demas campos que se utilizan.
Eso es lo que quiero.
Espero me puedas ayudar, un cordial saludo.
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

RE:problema con campos

Publicado por Leonardo Josue (878 intervenciones) el 13/08/2010 16:32:13
Ni hablas, creo que definitivamente no voy a poder ayudarte, no entiendo la lógica de negocio en este problema, no termino por comprender qué es lo que necesitas.

Espero sinceramente que alguien más te pueda echar la mano o mejor aun, que tú solo encuentres la solución.

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