//CREATE VIEW CN_BALANCE_GENERAL AS 
Select "ORDEN","CUENTA","NOMBRE_CUENTA","NATURALEZA","CORRIENTE","ID_CLASE_CUENTA","ID_GRUPO_CUENTA","ID_CUENTA_MAYOR","DIG_CLA","NOM_CLA","DIG_GRU","NOM_GRU","DIG_CUE","NOM_CUE","SALDO_ANTERIOR","DEBITO","CREDITO","SALDO_ACTUAL","VIG_PER","ID_CIA","ID_VIGENCIA","ID_PERIODO_CONTABLE" 
from (
select * from(

/*totales para cuenta de clase 1 al 2*/
select
/*orden*/
   (CASE
       WHEN dig_cla  = 1 THEN 1.2       
    ELSE 2.2
  END ) orden, 
null AS CUENTA,
/*TOTAL CLASES*/
   (CASE
       WHEN dig_cla  = 1 THEN 'TOTAL ACTIVO'       
    ELSE 'TOTAL PASIVO'
  END ) NOMBRE_CUENTA,
NATURALEZA,
-1 AS CORRIENTE,
ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
dig_cla,
nom_cla,
'9' as dig_gru,
null as nom_gru,
'99999' as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from(
/*totales por corrientes para cuenta de clase 1 al 3*/
select 
/*orden*/
   (CASE
       WHEN cla.DIGITO = 1 THEN 1
       WHEN cla.DIGITO = 2 THEN 2
    ELSE 3
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ANTERIOR)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.DEBITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.CREDITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ACTUAL)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 1 AND 2

group by 
cue.NATURALEZA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
NATURALEZA,
ID_CLASE_CUENTA,
dig_cla,
nom_cla,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
/*fin totales para cuenta de clase 1 al 2*/


union


/*totales para cuenta de clase 2 Y 3*/
select
/*orden*/
3.2 as orden, 
null AS CUENTA,
/*TOTAL CLASES 2 Y 3*/
'TOTAL PASIVO Y PATRIMONIO' AS NOMBRE_CUENTA,
NATURALEZA,
null as CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
'3' as dig_cla,
NULL as nom_cla,
'9' as dig_gru,
null as nom_gru,
'99999' as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from(
/*totales por corrientes para cuenta de clase 1 al 3*/
select 
/*orden*/
   (CASE
       WHEN cla.DIGITO = 1 THEN 1
       WHEN cla.DIGITO = 2 THEN 2
    ELSE 3
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ANTERIOR)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.DEBITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.CREDITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ACTUAL)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 2 AND 3

group by 
cue.NATURALEZA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
NATURALEZA,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
/*fin totales para cuenta de clase 2 Y 3*/

UNION

/*totales por corrientes para cuenta de clase 1 al 3*/
select
/*orden*/
   (CASE
       WHEN dig_cla = 1 THEN 1
       WHEN dig_cla = 2 THEN 2
    ELSE 3
  END ) orden,
null as CUENTA,
/*corriente*/
   (CASE
       WHEN dig_cla = 3 THEN 'PATRIMONIO'
       WHEN CORRIENTE = 1 and dig_cla = 1 THEN 'ACTIVO CORRIENTE'
       WHEN CORRIENTE = 1 and dig_cla = 2 THEN 'PASIVO CORRIENTE'
       WHEN CORRIENTE = 0 and dig_cla = 1 THEN 'ACTIVO NO CORRIENTE'
    ELSE 'PASIVO NO CORRIENTE'
  END ) NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
dig_cla,
nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from(
/*totales por corrientes para cuenta de clase 1 al 3*/
select 
/*orden*/
   (CASE
       WHEN cla.DIGITO = 1 THEN 1
       WHEN cla.DIGITO = 2 THEN 2
    ELSE 3
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ANTERIOR)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.DEBITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.CREDITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ACTUAL)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 1 AND 3

group by 
cue.NATURALEZA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
dig_cla,
nom_cla,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
/*fin totales por corrientes para cuenta de clase 1 al 3*/

union


/*totales grupo cuenta clases 1 al 3*/
select
/*orden*/
   (CASE
       WHEN dig_cla = 1 THEN 1
       WHEN dig_cla = 2 THEN 2
    ELSE 3
  END ) orden,
dig_cla || dig_gru as CUENTA,
nom_gru as NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
dig_cla,
nom_cla,
dig_gru,
nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from(
/*totales por grupo cuenta de clase 1 al 3*/
select 
/*orden*/
   (CASE
       WHEN cla.DIGITO = 1 THEN 1
       WHEN cla.DIGITO = 2 THEN 2
    ELSE 3
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ANTERIOR)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.DEBITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.CREDITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ACTUAL)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 1 AND 3

group by 
cue.NATURALEZA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
ID_GRUPO_CUENTA,
dig_cla,
nom_cla,
dig_gru,
nom_gru,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
/*fin totales grupo cuenta*/

union


/*cuentas mayor de clase 1 al 3*/
select 
/*orden*/
   (CASE
       WHEN cla.DIGITO = 1 THEN 1
       WHEN cla.DIGITO = 2 THEN 2
    ELSE 3
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ANTERIOR)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.DEBITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.CREDITO)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cla.DIGITO = 3 and gru.DIGITO = 2 and cue.DIGITOS = 30 and sum(sal.SALDO_ACTUAL) = 0 THEN (/*EXCEDENTE(DEFICIT) DEL EJERCICIO*/

SELECT     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL
FROM (

/*EXCEDENTE(DEFICIT) OPERACIONAL*/
/*sumatoria cuentas 4, menos 5 y 6*/
SELECT 
null as ORDEN,
null as CUENTA,
null as NOMBRE_CUENTA,
null as NATURALEZA,
CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
null as dig_cla,
null as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE

FROM (
/*totales por otros ingresos y gastos para cuenta de clase 4 al 6 solo grupo 8*/
Select 
/*otros ingresos y gastos*/
null as orden,
null  AS CUENTA,
null as NOMBRE_CUENTA,
null as NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
null as  dig_gru,
null as  nom_gru,
null as dig_cue,
null as nom_cue,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.SALDO_ANTERIOR)
    ELSE -sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.DEBITO)
    ELSE -sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.CREDITO)
    ELSE -sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.SALDO_ACTUAL)
    ELSE -sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
 cla.DIGITO BETWEEN 4 AND 6
and gru.DIGITO != 8

group by 
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
cla.DIGITO,
cla.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
ORDEN,
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE


UNION


/*EXCEDENTE(DEFICIT) NO OPERACIONAL*/
/*sumatoria cuentas 4, menos 5 y 6*/
SELECT 
null as ORDEN,
null as CUENTA,
null as NOMBRE_CUENTA,
null as NATURALEZA,
CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
null as dig_cla,
null as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE

FROM (
/*totales por otros ingresos y gastos para cuenta de clase 4 al 6 solo grupo 8*/
Select 
/*otros ingresos y gastos*/
2 as orden,
null  AS CUENTA,
'EXCEDENTE(DEFICIT) NO OPERACIONAL' AS NOMBRE_CUENTA,
null as NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
null as  dig_gru,
null as  nom_gru,
null as dig_cue,
null as nom_cue,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.SALDO_ANTERIOR)
    ELSE -sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.DEBITO)
    ELSE -sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.CREDITO)
    ELSE -sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cla.DIGITO = 4 THEN sum(sal.SALDO_ACTUAL)
    ELSE -sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
 cla.DIGITO BETWEEN 4 AND 6
and gru.DIGITO = 8
AND cue.DIGITOS != 10
AND cue.DIGITOS != 15

group by 
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
cla.DIGITO,
cla.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
ORDEN,
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE


UNION


/*PARTIDAS EXTRAORDINARIAS*/

select 
null as orden,
NULL AS CUENTA,
null as  NOMBRE_CUENTA,
null as NATURALEZA,
CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
NULL AS ID_CUENTA_MAYOR,
null as dig_cla,
null as nom_cla,
null as dig_gru,
null as nom_gru,
NULL AS dig_cue,
NULL AS nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from (
/*grupos de clase 4 al 6*/
select 
/*otros ingresos y gastos*/
   (CASE
       WHEN gru.DIGITO = 8 and ( cue.DIGITOS != 10 and cue.DIGITOS != 15 ) THEN 2
       WHEN gru.DIGITO = 8 THEN 3
    ELSE 1
  END ) orden,
cla.DIGITO || gru.DIGITO AS CUENTA,
/*TITULO PARA GRUPO*/
GRU.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
null as dig_cue,
null as nom_cue,
sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(sal.DEBITO) AS DEBITO,
sum(sal.CREDITO) AS CREDITO,     
sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
 cla.DIGITO BETWEEN 4 AND 6
and gru.DIGITO = 8
AND ( cue.DIGITOS = 10 OR cue.DIGITOS = 15 )

group by 
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE

)
group by 
orden,
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
ID_GRUPO_CUENTA,
ID_CUENTA_MAYOR,
dig_cla,
nom_cla,
dig_gru,
nom_gru,
dig_cue,
nom_cue,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE




)
where 
ID_CIA = sal.ID_CIA
and ID_VIGENCIA = sal.ID_VIGENCIA
and ID_PERIODO_CONTABLE = sal.ID_PERIODO_CONTABLE

GROUP BY 
CUENTA,
NATURALEZA,
CORRIENTE,
ID_CLASE_CUENTA,
ID_GRUPO_CUENTA,
ID_CUENTA_MAYOR,
dig_cla,
nom_cla,
dig_gru,
nom_gru,
dig_cue,
nom_cue,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE

/*fin EXCEDENTE(DEFICIT) DEL EJERCICIO*/) -- calcular valor del resultado del ejercicio si no hay valor
       WHEN cue.NOMBRE like '%(CR)%' and cue.NATURALEZA like '%C%' THEN -sum(sal.SALDO_ACTUAL)
       WHEN cue.NOMBRE like '%(DB)%' and cue.NATURALEZA like '%D%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 1 AND 3

group by 
cue.NATURALEZA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
order by
CORRIENTE DESC
)

union


/*total clase cuenta 8*/
select
8 as orden, 
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
null as CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
'8' as dig_cla,
null as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from (
/*total cuenta clase 8*/
select 
cla.DIGITO  AS CUENTA,
cla.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
NULL AS CORRIENTE,
sal.ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(CR)%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(CR)%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE 

from CN_SALDO_VIGPER sal

join CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
sal.ID_CLASE_CUENTA = 9

group by 
cla.NATURALEZA,
sal.ID_CLASE_CUENTA,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
cue.NOMBRE, 
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE



union

/*totales grupos de clase 8*/
select 
8.1 as orden, 
cla.DIGITO || gru.DIGITO  AS CUENTA,
gru.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
null as dig_cue,
null as nom_cue,
sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(sal.DEBITO) AS DEBITO,
sum(sal.CREDITO) AS CREDITO,     
sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/


from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
sal.ID_CLASE_CUENTA = 9

group by 
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE

union

/*total clase cuenta 9*/
select
9 as orden, 
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
null as CORRIENTE,
null as ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
'9' as dig_cla,
null as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
null as nom_cue,
sum(SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(DEBITO) AS DEBITO,
sum(CREDITO) AS CREDITO,     
sum(SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE
from (
/*total cuenta clase 9*/
select 
cla.DIGITO  AS CUENTA,
cla.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
NULL AS CORRIENTE,
sal.ID_CLASE_CUENTA,
null as ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
null as dig_gru,
null as nom_gru,
null as dig_cue,
cue.NOMBRE as nom_cue,
(CASE
       WHEN cue.NOMBRE like '%(DB)%' THEN -sum(sal.SALDO_ANTERIOR)
    ELSE sum(sal.SALDO_ANTERIOR)
  END) SALDO_ANTERIOR,
--sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
(CASE
       WHEN cue.NOMBRE like '%(DB)%' THEN -sum(sal.DEBITO)
    ELSE sum(sal.DEBITO)
  END) DEBITO,
--sum(sal.DEBITO) AS DEBITO,
(CASE
       WHEN cue.NOMBRE like '%(DB)%' THEN -sum(sal.CREDITO)
    ELSE sum(sal.CREDITO)
  END) CREDITO,
--sum(sal.CREDITO) AS CREDITO,     
(CASE
       WHEN cue.NOMBRE like '%(DB)%' THEN -sum(sal.SALDO_ACTUAL)
    ELSE sum(sal.SALDO_ACTUAL)
  END) SALDO_ACTUAL,
--sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE 

from CN_SALDO_VIGPER sal

join CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
sal.ID_CLASE_CUENTA = 10

group by 
cla.NATURALEZA,
sal.ID_CLASE_CUENTA,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
cue.NOMBRE, 
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
)
group by 
CUENTA,
NOMBRE_CUENTA,
NATURALEZA,
CORRIENTE,
/*llave de la vista*/  
VIG_PER,
ID_CIA,
ID_VIGENCIA,
ID_PERIODO_CONTABLE


union

/*totales grupos de clase 9*/
select 
9.1 as orden, 
cla.DIGITO || gru.DIGITO  AS CUENTA,
gru.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
null as ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
null as dig_cue,
null as nom_cue,
sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(sal.DEBITO) AS DEBITO,
sum(sal.CREDITO) AS CREDITO,     
sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/


from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where 
sal.ID_CLASE_CUENTA = 10

group by 
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE

union

/*cuentas mayor de clase 8 al 9*/
select
/*orden*/
   (CASE
       WHEN cla.DIGITO = 8 THEN 8.1
    ELSE 9.1
  END ) orden,
cla.DIGITO || gru.DIGITO || cue.DIGITOS AS CUENTA,
cue.NOMBRE AS NOMBRE_CUENTA,
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
SAL.ID_CUENTA_MAYOR,
cla.DIGITO as dig_cla,
cla.NOMBRE as nom_cla,
gru.DIGITO as dig_gru,
gru.NOMBRE as nom_gru,
cue.DIGITOS as dig_cue,
cue.NOMBRE as nom_cue,
sum(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
sum(sal.DEBITO) AS DEBITO,
sum(sal.CREDITO) AS CREDITO,     
sum(sal.SALDO_ACTUAL) AS SALDO_ACTUAL,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE
/*saldo mes comparativo*/

from CN_SALDO_VIGPER sal

JOIN CN_CLASE_CUENTA cla on 
sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

JOIN CN_GRUPO_CUENTA gru ON
 sal.ID_CIA = gru.ID_CIA
 AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA

JOIN CN_CUENTA_MAYOR cue ON
 sal.ID_CIA = cue.ID_CIA
 AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA

JOIN CN_CATALOGO cat ON
 sal.ID_CIA = cat.ID_CIA
 AND sal.ID_CATALOGO = cat.ID_CATALOGO
 AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
 AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
 AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA

where  cla.DIGITO BETWEEN 8 AND 9

group by 
cla.NATURALEZA,
cat.CORRIENTE,
sal.ID_CLASE_CUENTA,
sal.ID_GRUPO_CUENTA,
sal.ID_CUENTA_MAYOR,
cla.DIGITO,
cla.NOMBRE,
gru.DIGITO,
gru.NOMBRE,
cue.DIGITOS,
cue.NOMBRE,
/*llave de la vista*/  
sal.VIG_PER,
sal.ID_CIA,
sal.ID_VIGENCIA,
sal.ID_PERIODO_CONTABLE



)bal

where
bal.cuenta = '3230'

order by
bal.id_cia ASC,
bal.id_vigencia ASC,
bal.id_periodo_contable ASC,
bal.orden ASC,
bal.dig_cla ASC,
bal.CORRIENTE DESC,
nvl(bal.dig_gru,00) ASC,
nvl(bal.dig_cue,00) ASC