problema en la consulta SQL
Publicado por raquel (3 intervenciones) el 01/09/2014 18:53:46
Estoy resolviendo el store procedure para que me agrupe por cuentas los
totales en este caso cree dos nuevas columnas totalxgrup y totalxcue,
pero necesito una tercera columna que calcule cuando los totales por
grupo(totalxgrup=1 y nivel de cuenta=4, estas cuentas esntan divididadas
por niveles por ejemplo 4,5,6,8. en el adjunto envio store y la tabla
que genera. cree una nueva columna se q se llama totalxreng para que me indique el saldo segun sub select del totalxreng pero no me muestra nada y solo aparece NULL
totales en este caso cree dos nuevas columnas totalxgrup y totalxcue,
pero necesito una tercera columna que calcule cuando los totales por
grupo(totalxgrup=1 y nivel de cuenta=4, estas cuentas esntan divididadas
por niveles por ejemplo 4,5,6,8. en el adjunto envio store y la tabla
que genera. cree una nueva columna se q se llama totalxreng para que me indique el saldo segun sub select del totalxreng pero no me muestra nada y solo aparece NULL
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
if (year(@fec_desde) <= 1900)
RAISERROR('La fecha debe ser mayor a 1900.',16,1)
declare @cu_primaria char(20), @cu_secundaria char(20),@cu_activo char(20),@cu_pasivo char(20),@cu_capital char(20),@cu_adicional char(20)
/*selecciona las cuentas de orden primerio y secundaria*/
select @cu_primaria=cu_primaria, @cu_secundaria=cu_secundaria ,@cu_activo = cu_activo,@cu_pasivo = cu_pasivo,@cu_capital = cu_capital,@cu_adicional = cu_adicional from par_emp;
Select A.*,B.des_cue as totalxcue from (
SELECT co_cue, SaldoActual, EsIngEgr, detalle, des_cue, co_cuepadre,NivelCuenta,
(SaldoActual) as sald1, SUBSTRING (co_cue,1,3)as totalxgrup ,
(Select desc_empresa from MasterProfitPro.dbo.MpEmpresa where cod_empresa =(select cod_emp from par_emp)) AS emp,
(Select rif from MasterProfitPro.dbo.MpEmpresa where cod_empresa =(select cod_emp from par_emp)) AS rif,
----------------
((SELECT Total.SaldoActual FROM sccuenta
where Total.SaldoActual = substring(Total.co_cue,1,3) and Total.NivelCuenta=4 ))As totalxreng
----------------------
FROM (
SELECT C.co_cue, ((sum(isnull(Totales.montoD,0)) - sum(isnull(Totales.montoH,0)))) AS SaldoActual,
dbo.EsCuentaIngresoEgreso(C.co_cue) as EsIngEgr,
C.detalle, C.des_cue,C.co_cuepadre,isnull(@iNivel,0) as Nivel, dbo.NivelCuenta(len(C.co_cue)) as NivelCuenta
FROM sccuenta C
RIGHT JOIN (
SELECT ISNULL(saldo_inicial.co_cue,saldo_final.co_cue) AS co_cue,
saldo_final.montoD,
saldo_final.montoH,
saldo_inicial.SaldoInicial
FROM
(SELECT saldo_final.co_cue as co_cue,
SUM(ISNULL(saldo_final.monto_d,0)) as montoD,
SUM(ISNULL(saldo_final.monto_h,0)) as montoH
FROM
-- (SELECT * FROM [dbo].[scSaldoCuenta04](@fec_hasta,@sCo_cen_d,@sCo_cen_h,@sCo_gas_d,@sCo_gas_h,null,@sCo_adi_d,@sCo_adi_h,@sCo_aux_d,@sCo_aux_h,@bDiario,@bFiscal,@bDpc10,@bOtrosAjustes,@bProcesado,@sCo_mone,null,@bComprobanteCIE) saldo_final
-- WHERE((@fec_desde is null or saldo_final.fec_emis >= @fec_desde) AND (@fec_hasta is null or saldo_final.fec_emis <= @fec_hasta ))) saldo_final
-- GROUP BY co_cue) saldo_final
-- se mejoró el query para disminuir el tiempo de respuesta
(SELECT *
FROM [dbo].[scSaldoCuenta04](@fec_hasta,@sCo_cen_d,@sCo_cen_h,@sCo_gas_d,@sCo_gas_h,null,@sCo_adi_d,@sCo_adi_h,@sCo_aux_d,@sCo_aux_h,@bDiario,@bFiscal,@bDpc10,@bOtrosAjustes,@bProcesado,@sCo_mone,null,@bComprobanteCIE) saldo_final
WHERE((@fec_desde is null or saldo_final.fec_emis >= @fec_desde) AND (@fec_hasta is null or saldo_final.fec_emis <= @fec_hasta )
AND (@sCo_cue_d is null or saldo_final.co_cue >= @sCo_cue_d) AND (@sCo_cue_h is null or saldo_final.co_cue <= @sCo_cue_h))) saldo_final
GROUP BY co_cue) saldo_final
FULL JOIN
-- (SELECT co_cue, SUM(ISNULL(monto_d,0) - ISNULL(monto_h,0)) as SaldoInicial
-- FROM [dbo].[scSaldoCuenta04](dateadd(day,-1,@fec_desde), @sCo_cen_d,@sCo_cen_h,@sCo_gas_d,@sCo_gas_h,null,@sCo_adi_d,@sCo_adi_h,@sCo_aux_d,@sCo_aux_h,@bDiario,@bFiscal,@bDpc10,@bOtrosAjustes,@bProcesado,@sCo_mone,null,1)
-- GROUP BY co_cue ) saldo_inicial ON saldo_final.co_cue = saldo_inicial.co_cue
-- se mejoró el query para disminuir el tiempo de respuesta
(SELECT co_cue, SUM(ISNULL(monto_d,0) - ISNULL(monto_h,0)) as SaldoInicial
FROM [dbo].[scSaldoCuenta04](dateadd(day,-1,@fec_desde), @sCo_cen_d,@sCo_cen_h,@sCo_gas_d,@sCo_gas_h,null,@sCo_adi_d,@sCo_adi_h,@sCo_aux_d,@sCo_aux_h,@bDiario,@bFiscal,@bDpc10,@bOtrosAjustes,@bProcesado,@sCo_mone,null,1) saldo_inicial
WHERE (@sCo_cue_d is null or saldo_inicial.co_cue >= @sCo_cue_d) AND (@sCo_cue_h is null or saldo_inicial.co_cue <= @sCo_cue_h)
GROUP BY co_cue) saldo_inicial ON saldo_final.co_cue = saldo_inicial.co_cue
WHERE
--Filtro de Cuenta
((@sCo_cue_d is null OR isnull(saldo_inicial.co_cue,saldo_final.co_cue) >= @sCo_cue_d) AND (@sCo_cue_h is null OR (@sCo_cue_d is null AND isnull(saldo_inicial.co_cue,saldo_final.co_cue) is null ) OR isnull(saldo_inicial.co_cue,saldo_final.co_cue) <= @sCo_cue_h))
) Totales ON substring(Totales.co_cue,1,len(C.co_cue)) = C.co_cue
WHERE
--Filtro de nivel
(@iNivel is null or len(C.co_cue) <= dbo.LongitudNivel(@iNivel))
--Filtro de excluir cuenta de orden
AND (@bExcluir_CtaOrden is null or @bExcluir_CtaOrden=0 or
(@bExcluir_CtaOrden=1
AND ((@cu_primaria is null OR (C.co_cue <> @cu_primaria AND substring(C.co_cue,1,len(@cu_primaria)) <> @cu_primaria))
AND (@cu_secundaria is null OR (C.co_cue <> @cu_secundaria AND substring(C.co_cue,1,len(@cu_secundaria)) <> @cu_secundaria)))))
--Filtro de cuenta con movimiento
AND ((@bCuentaconMov = 1 AND ((Totales.SaldoInicial is not null and Totales.SaldoInicial <> 0)
OR (Totales.montoD is not null and Totales.montoD <> 0)
OR (Totales.montoH is not null and Totales.montoH <> 0))) OR (@bCuentaconMov = 0))
GROUP BY C.co_cue, C.detalle, C.des_cue,C.co_cuepadre
) as Total
WHERE ((@bCuentaconMov = 1 AND Total.SaldoActual <> 0) or @bCuentaconMov = 0)
AND
EsIngEgr = 1
)as A
--------- (raquel)aca es dond finaliza A. y empieza la union de B. con un left join a B. el cual genera el totalxgrup
left join dbo.sccuenta as B
on (substring(B.co_cue,1,3)=A.totalxgrup)and B.co_cuepadre is null
----- (raquel)y el where para filtar por tipo de cuenta con su saldo correspondiente
left join dbo.sccuenta as d
on d.co_cue=A.co_cue
END
Valora esta pregunta


0