SQL - problema en la consulta SQL

 
Vista:

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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder