Oracle - Ayuda con un query cuya sub consulta trae mas de un valor

 
Vista:

Ayuda con un query cuya sub consulta trae mas de un valor

Publicado por Daniel (2 intervenciones) el 04/07/2017 20:30:38
Este es el query, necesito obtener los datos cant_vta y precio de la tabla cps_facturas por cada item del select principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Select
cpp_csolpedido.cod_tit as Cod_Cliente,
ct_clientes.nom_tit as Nombre,
ct_clientes.cod_canal as Cod_Canal,
ct_canales.nom_canal as Canal,
cpp_dsolpedido.cod_articulo as Cod_Articulo,
ct_articulos.nom_articulo as Articulo,
ct_familiasart.cod_familia_art as Cod_Flia_ART,
ct_familiasart.nom_familia_art as Flia_ART,
cpp_csolpedido.nro_trans as Nro_Trans,
cpp_csolpedido.fec_doc as Fecha,
cpp_dsolpedido.cant_vta as Cantidad_PED,
cpp_dsolpedido.precio as Cantidad_PED,
(Select cps_facturas.cant_vta
From cpt_facturas, cps_facturas
Where cpt_facturas.nro_docum_ref=cpp_csolpedido.nro_docum and cpt_facturas.nro_trans=cps_facturas.nro_trans and cps_facturas.cod_articulo=cpp_dsolpedido.cod_articulo) as T3
From
ct_clientes, ct_canales,ct_articulos,ct_familiasart,cpp_csolpedido,cpp_dsolpedido
Where
ct_clientes.cod_tit = cpp_csolpedido.cod_tit AND
ct_clientes.cod_canal = ct_canales.cod_canal AND
cpp_dsolpedido.cod_articulo = ct_articulos.cod_articulo AND
cpp_csolpedido.nro_trans = cpp_dsolpedido.nro_trans AND
ct_articulos.cod_familia_art = ct_familiasart.cod_familia_art AND
cpp_csolpedido.fec_doc BETWEEN TO_DATE('01/01/2016', 'dd/mm/yyyy') and TO_DATE('31/01/2016', 'dd/mm/yyyy')
Order by Fecha

Las tablas involucradas son las siguientes:
cpp_csolpedido cabecera de las solicitudes de pedido
cpp_dsolpedido detalle de las solicitudes de pedido
cpt_facturas cabecera de los pedidos facturados
cps_facturas detalle de los pedidos facturados
las tablas cpp_csolpedido y cpp_dsolpedido se relacionan por la columna nro_trans
las tablas cpt_facturas y cps_facturas se relacionan por la columna nro_trans
las tablas cpp_csolpedido y cpt_facturas se relacionan por las columnas nro_docum_ref y nro_docum

El problema es que mi subselect me devuelve mas de una linea..

Pueden darme una mano?
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

Ayuda con un query cuya sub consulta trae mas de un valor

Publicado por jose (17 intervenciones) el 05/07/2017 14:31:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Select cpp_csolpedido.cod_tit as Cod_Cliente,
       ct_clientes.nom_tit as Nombre,
       ct_clientes.cod_canal as Cod_Canal,
       ct_canales.nom_canal as Canal,
       cpp_dsolpedido.cod_articulo as Cod_Articulo,
       ct_articulos.nom_articulo as Articulo,
       ct_familiasart.cod_familia_art as Cod_Flia_ART,
       ct_familiasart.nom_familia_art as Flia_ART,
       cpp_csolpedido.nro_trans as Nro_Trans,
       cpp_csolpedido.fec_doc as Fecha,
       cpp_dsolpedido.cant_vta as Cantidad_PED,
       cpp_dsolpedido.precio as Cantidad_PED,
       (Select cps_facturas.cant_vta
          From cps_facturas
         Where cps_facturas.nro_trans= cpp_csolpedido.nro_trans) as T3
  From ct_clientes,
       ct_canales,
       ct_articulos,
       ct_familiasart,
       cpp_csolpedido,
       cpp_dsolpedido
 Where ct_clientes.cod_tit = cpp_csolpedido.cod_tit
   AND ct_clientes.cod_canal = ct_canales.cod_canal
   AND cpp_dsolpedido.cod_articulo = ct_articulos.cod_articulo
   AND cpp_csolpedido.nro_trans = cpp_dsolpedido.nro_trans
   AND ct_articulos.cod_familia_art = ct_familiasart.cod_familia_art
   AND cpp_csolpedido.fec_doc BETWEEN TO_DATE('01/01/2016', 'dd/mm/yyyy') and
       TO_DATE('31/01/2016', 'dd/mm/yyyy')
 Order by Fecha



creo que deberia ser algo asi, no conozco tanto las relaciones de tu table
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
Imágen de perfil de ELVIS STALYN MUÑOZ PRUNA
Val: 209
Plata
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con un query cuya sub consulta trae mas de un valor

Publicado por ELVIS STALYN MUÑOZ PRUNA (102 intervenciones) el 05/07/2017 18:10:39
Puedes hacer de tu subquery:

(Select distinct cps_facturas.cant_vta

From cps_facturas

Where cps_facturas.nro_trans= cpp_csolpedido.nro_trans)

o tambien
(Select cps_facturas.cant_vta

From cps_facturas

Where cps_facturas.nro_trans= cpp_csolpedido.nro_trans
group by cps_facturas.cant_vta)

recomiendo el segundo porque el distinct hace un full scan a las tablas y si tienes ciento de KILObytes se te hace pesada , re recomiendo que uses el EXPLAIN PLAN de tu query pricipal ya modificado con lo anteriormente indicado.


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

Ayuda con un query cuya sub consulta trae mas de un valor

Publicado por Daniel (2 intervenciones) el 05/07/2017 20:34:18
Muchas gracias, el mismo inconveniente..

Relaciones
Cabecera/detalle
cpp_csolpedido.nro_trans=cpp_dsolopedido.nro_trans

Cabecera/detalle
cpt_facturas.nro_trans=cps_facturas.nro_trans

Cabecera/Cabecera
cpp_csolpedido.cod_docum = cpt_facturas.cod_docum_ref

Las tablas solo entre cabecera y detalle comparten el nro_trans, yo necesito comparar ambos detalles y el único campo en común se encuentra en la cabecera.

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
Imágen de perfil de ELVIS STALYN MUÑOZ PRUNA
Val: 209
Plata
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

Ayuda con un query cuya sub consulta trae mas de un valor

Publicado por ELVIS STALYN MUÑOZ PRUNA (102 intervenciones) el 05/07/2017 21:12:21
Intenta en el subquery:

(Select cps_facturas.cant_vta
From cps_facturas
Where cps_facturas.nro_trans= cpp_csolpedido.nro_trans
and rownum=1)

prueba agregando el group by

Es lo mas que te puedo comentar.
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