Oracle - Funcion UNION

   
Vista:

Funcion UNION

Publicado por Byron (12 intervenciones) el 16/10/2013 23:09:02
Buenas tardes ayudenme con la siguiente consulta:
Necesito sacar un listado de todas mis facturas de compra tanto las que tienen retenciones como las que no, por ello pense en hacer un UNION de dos SELECT para poder sacar ambos tipos de facturas sin embargo lo que esta pasando esq me saca un listado de las facturas del un select y despues las del otro select y lo que deseo esque cuando sean los mismos se reemplacen.


Me generan valores duplicados pueden ayudarme por favor
Les adjunto la fuente para que le revisen
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

Funcion UNION

Publicado por luis pablo (232 intervenciones) el 17/10/2013 16:08:10
Puedes poner tu sentencia select como un texto y no como un archivo adjunto.

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

Funcion UNION

Publicado por Byron (12 intervenciones) el 17/10/2013 17:26:42
Aqui te lo dejo

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
--DIMM compras SERVICIOS = 1, INVENTARIO = 3
  SELECT a.proveedor_id,  a.valor_doc,
   case when (valor_doc >=1000)then '02' end formapago,
  --CONCAT('compra',rownum)Codigo_compra,
  decode(length(rownum),1,CONCAT('compra00',rownum),
  decode(length(rownum),2,CONCAT('compra0',rownum),
  decode(length(rownum),3,CONCAT('compra',rownum),
  decode(length(rownum),4,CONCAT('compra',rownum)))))Codigo_compra1,
  decode(d.CREDTRIB_ID,1,'01',6,'06')codigo_Sustento,
  DECODE(LENGTH(B.RUC_CEDULA),13,'01',10,'02',8,'03')TipoiDproveedor,
  B.RUC_CEDULA Nro_Identificación_Proveedor,
  DECODE(A.TIPODOC_ID,'FAC','01','NC','04') Codigo_Tipo_Comprobante,
  null Tipo_Proveedor,null Parte_Relacionada,to_char(a.fecha_con,'dd/mm/rrrr') Fecha_Registra,
   substr(a.seriedocxp ,1,3)Establecimiento,  substr(a.seriedocxp ,4,6)PuntodeEmision,a.NUMDOCXP Secuencial,
   to_char(A.FECHA_EMI,'dd/mm/rrrr')Fecha_Emision, b.N_AUTORIZACION Nro_AUTORIZACION,
   0 Base_Imponibl_no_objeto_IVA,a.BASE_IVA_IGUAL_0 Base_IVA_imponible_0,a.BASE_IVA_MAYOR_0 Base_imponible_12,
   0 Monto_ICE,a.valor_iva Monto_IVA,
  CUENTAS_X_PAGAR.obt_valRetencionPorTipo(A.EMPRESA_ID,A.PROVEEDOR_ID,A.TIPODOC_ID,A.NUMDOCXP,'I')RetencionIVAbienes30,
  CUENTAS_X_PAGAR.obt_valRetencionPorTipo(A.EMPRESA_ID,A.PROVEEDOR_ID,A.TIPODOC_ID,A.NUMDOCXP,'N')RetencionIVAservicios70,
  0 RetencionIVAservicios100,
  decode(E.PAIS_ID,'EC','01','02')Pagolocaloenexterior,'N/A' País_pago,'N/A' Aplica_tribut,'N/A'PagoNormaLegal,
  substr(E.SERIE_COMPRET,1,3)Establecimiento2,
  substr(E.SERIE_COMPRET,4,6)Puntodeemsión, a.retencion Secuencial,
  e.NOAUTO_COMPRET NúmerodeAutorización2,to_char(A.FECHA_EMI,'dd/mm/rrrr') Fechaemisioncomprobante,
   decode(A.TIPODOC_ID_REF,'FAC','01','SI','01') CódigoTipodoc,
   substr(A.SERIEDOCXP_REF,1,3)Establecimiento,
   substr(A.SERIEDOCXP_REF,4,6)PuntodeEmision,
   A.NUMDOCXP_REF Secuencial2_nc,
   a.NO_AUTO_REF Autorizacion,
   null TIPO_RETEN, null BASE_APLICA, 0 numdocxp,
   null COnceptodeRetencion,
   0 BASERETTOTAL,
   null PorcentajeRetencion,0 MontoRetencion
     FROM CXP_TRANSACC A, CXP_PROVEEDORES B, cxp_coa D, g_empresa E
  WHERE A.EMPRESA_ID = B.EMPRESA_ID
    AND A.PROVEEDOR_ID = B.PROVEEDOR_ID
    and a.empresa_id = d.empresa_id
    and a.tipodoc_id = d.tipodoc_id
    and a.proveedor_id = d.proveedor_id
    and a.numdocxp = d.numdocxp
    and a.empresa_id = e.empresa_id
    AND A.ESTADO = 'C'
    AND TRUNC(A.FECHA_EMI) BETWEEN '01-ENE-13' AND '31-ENE-13'
    AND A.ESTADO <> 'A'
    AND A.ESTADO = 'C'
    AND A.TIPODOC_ID IN ('FAC','NC')
 union all
 --mismo select + RETENCIONES
  select distinct a.proveedor_id,  a.valor_doc,
   case when (valor_doc >=1000)then '02' end formapago,
  --CONCAT('compra',rownum)Codigo_compra,
  decode(length(rownum),1,CONCAT('compra00',rownum),
  decode(length(rownum),2,CONCAT('compra0',rownum),
  decode(length(rownum),3,CONCAT('compra',rownum),
  decode(length(rownum),4,CONCAT('compra',rownum)))))Codigo_compra1,
  decode(d.CREDTRIB_ID,1,'01',6,'06')codigo_Sustento,
  DECODE(LENGTH(B.RUC_CEDULA),13,'01',10,'02',8,'03')TipoiDproveedor,
  B.RUC_CEDULA Nro_Identificación_Proveedor,
  DECODE(A.TIPODOC_ID,'FAC','01','NC','04') Codigo_Tipo_Comprobante,
  null Tipo_Proveedor,null Parte_Relacionada,to_char(a.fecha_con,'dd/mm/rrrr') Fecha_Registra,
   substr(a.seriedocxp ,1,3)Establecimiento,  substr(a.seriedocxp ,4,6)PuntodeEmision,a.NUMDOCXP Secuencial,
   to_char(A.FECHA_EMI,'dd/mm/rrrr')Fecha_Emision, b.N_AUTORIZACION Nro_AUTORIZACION,
   0 Base_Imponibl_no_objeto_IVA,a.BASE_IVA_IGUAL_0 Base_IVA_imponible_0,a.BASE_IVA_MAYOR_0 Base_imponible_12,
   0 Monto_ICE,a.valor_iva Monto_IVA,
  CUENTAS_X_PAGAR.obt_valRetencionPorTipo(A.EMPRESA_ID,A.PROVEEDOR_ID,A.TIPODOC_ID,A.NUMDOCXP,'I')RetencionIVAbienes30,
  CUENTAS_X_PAGAR.obt_valRetencionPorTipo(A.EMPRESA_ID,A.PROVEEDOR_ID,A.TIPODOC_ID,A.NUMDOCXP,'N')RetencionIVAservicios70,
  0 RetencionIVAservicios100,
  decode(E.PAIS_ID,'EC','01','02')Pagolocaloenexterior,'N/A' País_pago,'N/A' Aplica_tribut,'N/A'PagoNormaLegal,
  substr(E.SERIE_COMPRET,1,3)Establecimiento2,
  substr(E.SERIE_COMPRET,4,6)Puntodeemsión, a.retencion Secuencial,
  e.NOAUTO_COMPRET NúmerodeAutorización2,to_char(A.FECHA_EMI,'dd/mm/rrrr') Fechaemisioncomprobante,
   decode(A.TIPODOC_ID_REF,'FAC','01','SI','01') CódigoTipodoc,
   substr(A.SERIEDOCXP_REF,1,3)Establecimiento,
   substr(A.SERIEDOCXP_REF,4,6)PuntodeEmision,
   A.NUMDOCXP_REF Secuencial2_nc,
   a.NO_AUTO_REF Autorizacion,
   F.TIPO_RETEN,F.BASE_APLICA,a.numdocxp,
   c.retencion_id COnceptodeRetencion,
   nvl(BASE,0) + nvl(BASE_0,0) BASERETTOTAL,
   f.PORETEN PorcentajeRetencion,c.valor_let MontoRetencion
   FROM CXP_TRANSACC A, CXP_PROVEEDORES B,CXP_DETRANS c,cxp_coa D, g_empresa E, g_tiposreten F
  WHERE A.EMPRESA_ID      = B.EMPRESA_ID
    AND A.PROVEEDOR_ID    = B.PROVEEDOR_ID
    AND A.EMPRESA_ID      = C.EMPRESA_ID(+)
    AND A.PROVEEDOR_ID    = C.PROVEEDOR_ID(+)
    AND A.TIPODOC_ID      = C.TIPODOC_ID(+)
    AND A.NUMDOCXP        = C.NUMDOCXP(+)
    and c.empresa_id      = f.empresa_id
    and c.retencion_id    = f.retencion_id
    and a.empresa_id      = d.empresa_id
    and a.tipodoc_id      = d.tipodoc_id
    and a.proveedor_id    = d.proveedor_id
    and a.numdocxp        = d.numdocxp
    and a.empresa_id      = e.empresa_id
    --AND A.ESTADO          = 'C'
    AND A.TIPODOC_ID      IN ('FAC','NC')
    AND TRUNC(A.FECHA_EMI) BETWEEN '01-ene-13' AND '31-ene-13'
    AND A.ESTADO          <> 'A'
    AND TIPOSERVTA_ID     IN ('1','3')
    AND A.ESTADO          = 'C'
    AND F.BASE_APLICA <> 'I'
  ORDER BY Codigo_compra1--,A.FECHA_EMI,A.NUMDOCXP,A.TIPODOC_ID
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

Funcion UNION

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 17/10/2013 17:38:28
Fácil, en tu select estás usando el "UNION ALL" que jamás va a unir los registros repetidos, debe usar el "UNION".


Cambia el "UNION ALL" por el "UNION" y me comentas los resultados.

PD: Respondiendo tu consulta en otro mensaje he puesto ejemplos de diferencias de "UNION" y "UNION ALL" , favor de aplicarlo.


Saludos

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

Funcion UNION

Publicado por Byron (12 intervenciones) el 18/10/2013 01:07:15
pues no fue la solucion porque me siguen apareciendo duplicados
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

Funcion UNION

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 22/10/2013 16:30:25
Favor de verificar los datos resultado de tus sentencias select.

Puedes fijarte como funcionan el "UNION" y el "UNION ALL" en los ejemplos que he puesto, a tu pregunta. Verifica como se comportan estas sentencias (ejecútalas):

select 1 cod, 'aaa' descri from dual
union all
select 1 , 'aaa' descri from dual;


select 1 cod, 'aaa' descri from dual
union
select 1 , 'aaa' descri from dual;

select 1 cod, 'aaa' descri from dual
union
select 1 , 'aab' descri from dual;



Si sale un mensaje de error también verificar el mensaje.

Saludos

Luis
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

Funcion UNION

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 17/10/2013 16:17:24
Aquí algunos ejemplitos del "UNION" y "UNION ALL"

El "UNION" realiza una combinación y presenta los valores distintos presentes en todas las sentencias select que conforman la unión, en cambio el "UNION ALL" no. Aquí unas sentencias select donde puedes apreciar la diferencia en su funcionamiento.

select 1 cod, 'aaa' descri from dual
union all
select 1 , 'aaa' descri from dual;


select 1 cod, 'aaa' descri from dual
union
select 1 , 'aaa' descri from dual;

select 1 cod, 'aaa' descri from dual
union
select 1 , 'aab' descri from dual;


Espero te sirva para tu caso ... y lo que deseas hacer con tu consulta ...

Saludos


Luis
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

Funcion UNION

Publicado por Richie Valbuena (16 intervenciones) el 24/10/2013 14:29:59
Las misma funcion te explica sus funcionalidad te va a unir lis resultados de los select q obtengas en los mismos, derias manejar eso resultados duplicados en el Join! Como validas en la tabla si tu factura aplica una retencion.
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