SQL Server - Ayuda con esta consulta

   
Vista:

Ayuda con esta consulta

Publicado por Cristian Canteros (4 intervenciones) el 18/05/2011 04:45:33
*****************************************************************************************************
ALGUIEN ME PUEDE AYUDAR CON LA SIGUIENTES CONSULTAS
*****************************************************************************************************

---------------------------------------------------------------------------------------------------------
SELECT CONVERT(VARCHAR(7),C.FECHA ,111) AS MES, COUNT(C.FECHA) AS TOTAL_VENTAS
FROM
CUENTAS C
WHERE
C.IDPROMOTOR=@VARIdPromotor AND (C.IDCUENTA >=@VARIDCuentaInicio AND C.IDCUENTA<=@VARIdCuentaFinal)
GROUP BY CONVERT(VARCHAR(7),C.FECHA ,111)-- C.FECHA

---------------------------------------------------------------------------------------------------------

SELECT CONVERT(VARCHAR(7),C1.FECHA ,111) AS MES, COUNT(C1.FECHA) AS TOTAL_VENTAS_PRIM_CUOTAS
FROM Cuentas C1
WHERE (Estado='normal'or Estado='cancelado') and C1.IDPROMOTOR=@VARIdPromotor AND (C1.IDCUENTA >=@VARIDCuentaInicio AND C1.IDCUENTA<=@VARIdCuentaFinal)
AND EXISTS(
SELECT *
FROM (
SELECT IdCuenta,SUM(Importe) ImpTotal
FROM Pagos P
WHERE EXISTS(SELECT *
FROM Cuentas C
WHERE C.IdCuenta=P.IdCuenta
AND Estado='Normal'
)
GROUP BY IdCuenta
)A
WHERE A.IdCuenta=C1.IdCuenta
AND A.ImpTotal>=C1.comision
)
GROUP BY CONVERT(VARCHAR(7),C1.FECHA ,111)
---------------------------------------------------------------------------------------------------------
SELECT CONVERT(VARCHAR(7),C1.FECHA ,111) AS MES, COUNT(C1.FECHA) AS TOTAL_VENTAS_C_SEÑAS
FROM Cuentas C1
WHERE Estado='normal'AND C1.IDPROMOTOR=@VARIdPromotor AND (C1.IDCUENTA >=@VARIDCuentaInicio AND C1.IDCUENTA<=@VARIdCuentaFinal)
AND EXISTS(
SELECT *
FROM (
SELECT IdCuenta,SUM(Importe) ImpTotal
FROM Pagos P
WHERE EXISTS(SELECT *
FROM Cuentas C
WHERE C.IdCuenta=P.IdCuenta
AND Estado='Normal'
)
GROUP BY IdCuenta
)A
WHERE A.IdCuenta=C1.IdCuenta
AND A.ImpTotal<C1.comision
)
GROUP BY CONVERT(VARCHAR(7),C1.FECHA ,111)


**************************************************************************************************
CADA CONSULTA ARROJA ESTOS RESULTADOS
***************************************************************************************************
PERIODO TOTAL_VENTAS
2007/01 5
2007/02 57
2007/03 58
2007/04 51
2007/05 39
2007/06 26

PERIODO TOTAL_VENTAS_PRIM_CUOTAS
2007/01 1
2007/02 16
2007/03 14
2007/04 17
2007/05 25
2007/06 10

PERIDO TOTAL__SEÑAS
2007/02 1
2007/04 1
2007/05 3

*****************************************************************************************************
PERO QUIERO QUE TODO SALGA DE ESTA MANERA
*****************************************************************************************************
PERIODO TOTAL_VENTAS TOTAL_VENTAS_PRIM_CUOTA TOTAL__SEÑAS
2007/01 5 1
2007/02 57 16 1
2007/03 58 14
2007/04 51 17 1
2007/05 39 5 3
2007/06 26 10

ALGUNA IDEA? MUCHAS GRACIAS
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 esta consulta

Publicado por Cristian Canteros (4 intervenciones) el 18/05/2011 15:49:27
Si, tal cual, pero como son varias consultas y sobre la misma tabla, ahi se me complica porque no se como hacer el enlace.
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

SOLUCIONADO

Publicado por Cristian Canteros (4 intervenciones) el 18/05/2011 16:29:43
CON AYUDA, LA CONSULTA QUEDO ASI, LO COMPARTO CON EL FORO

DECLARE @VARIdPromotor Int,@VARIdCuentaInicio Int, @VARIdCuentaFinal Int, @VARFechaInicio datetime,@VARFechaFinal datetime
SELECT @VARIdPromotor=1086, @VARIdCuentaInicio=70000, @VARIdCuentaFinal=100000,@VARFechaInicio='01-01-2009',@VARFechaFinal='11-01-2009'

----------- TOTAL DE VENTAS -----------------
SELECT CONVERT(VARCHAR(7),C.FECHA ,111) AS MES,
COUNT(C.FECHA) AS TOTAL_VENTAS
INTO #CuentasTotales

FROM
CUENTAS C
WHERE
C.IDPROMOTOR=@VARIdPromotor AND (C.IDCUENTA >=@VARIDCuentaInicio AND C.IDCUENTA<=@VARIdCuentaFinal)
GROUP BY CONVERT(VARCHAR(7),C.FECHA ,111)-- C.FECHA


----------- CON PRIMERAS CUOTAS -----------------

SELECT CONVERT(VARCHAR(7),C1.FECHA ,111) AS MES,
COUNT(C1.FECHA) AS TOTAL_VENTAS_PRIM_CUOTAS
INTO #CuentasConPrimerasCuotas

FROM Cuentas C1
WHERE (Estado='normal'or Estado='cancelado') and C1.IDPROMOTOR=@VARIdPromotor AND (C1.IDCUENTA >=@VARIDCuentaInicio AND C1.IDCUENTA<=@VARIdCuentaFinal)
AND EXISTS(
SELECT *
FROM (
SELECT IdCuenta,SUM(Importe) ImpTotal
FROM Pagos P
WHERE EXISTS(SELECT *
FROM Cuentas C
WHERE C.IdCuenta=P.IdCuenta
AND Estado='Normal'
)
GROUP BY IdCuenta
)A
WHERE A.IdCuenta=C1.IdCuenta
AND A.ImpTotal>=C1.comision
)
GROUP BY CONVERT(VARCHAR(7),C1.FECHA ,111)

----------- CON SEÑAS -----------------
SELECT CONVERT(VARCHAR(7),C1.FECHA ,111) AS MES,
COUNT(C1.FECHA) AS TOTAL_VENTAS_C_SEÑAS
INTO #CuentasConSeñas

FROM Cuentas C1
WHERE Estado='normal'AND C1.IDPROMOTOR=@VARIdPromotor AND (C1.IDCUENTA >=@VARIDCuentaInicio AND C1.IDCUENTA<=@VARIdCuentaFinal)
AND EXISTS(
SELECT *
FROM (
SELECT IdCuenta,SUM(Importe) ImpTotal
FROM Pagos P
WHERE EXISTS(SELECT *
FROM Cuentas C
WHERE C.IdCuenta=P.IdCuenta
AND Estado='Normal'
)
GROUP BY IdCuenta
)A
WHERE A.IdCuenta=C1.IdCuenta
AND A.ImpTotal<C1.comision
)
GROUP BY CONVERT(VARCHAR(7),C1.FECHA ,111)

----------- TOTAL ANULADAS -----------------
SELECT
CONVERT(VARCHAR(7),C.FECHA ,111) AS MES
, COUNT(C.FECHA) AS TOTAL_VENTAS_ANULADAS
INTO #CuentasAnuladas
FROM CUENTAS C
WHERE
C.ESTADO ='ANULADO' AND C.IDPROMOTOR=@VARIdPromotor AND (C.IDCUENTA >=@VARIDCuentaInicio AND C.IDCUENTA<=@VARIdCuentaFinal)
GROUP BY CONVERT(VARCHAR(7),C.FECHA ,111)-- C.FECHA

-------- cuentas canceladas


SELECT
CONVERT(VARCHAR(7),C.FECHA ,111) AS MES
, COUNT(C.FECHA) AS TOTAL_VENTAS_CANCELADAS
INTO #CuentasCanceladas
FROM
CUENTAS C
WHERE
C.ESTADO ='CANCELADO'
AND C.IDPROMOTOR=@VARIdPromotor
AND (C.IDCUENTA >=@VARIDCuentaInicio AND C.IDCUENTA<=@VARIdCuentaFinal)
GROUP BY CONVERT(VARCHAR(7),C.FECHA ,111)-- C.FECHA

----------------------------------

SELECT DISTINCT MES
INTO #Meses
FROM (
SELECT MES FROM #CuentasTotales
UNION SELECT MES FROM #CuentasConPrimerasCuotas
UNION SELECT MES FROM #CuentasConSeñas
UNION SELECT MES FROM #CuentasAnuladas
UNION SELECT MES FROM #CuentasCanceladas
)
MESES

SELECT M.MES, CT.TOTAL_VENTAS,
CPR.TOTAL_VENTAS_PRIM_CUOTAS,
CCS.TOTAL_VENTAS_C_SEÑAS,
CA.TOTAL_VENTAS_ANULADAS,
CC.TOTAL_VENTAS_CANCELADAS
FROM #Meses M
LEFT JOIN #CuentasTotales CT ON M.Mes=CT.Mes
LEFT JOIN #CuentasConPrimerasCuotas CPR ON M.Mes=CPR.Mes
LEFT JOIN #CuentasConSeñas CCS ON M.MES=CCS.MES
LEFT JOIN #CuentasAnuladas CA ON M.Mes=CA.Mes
LEFT JOIN #CuentasCanceladas CC ON M.Mes=CC.Mes

DROP TABLE #CuentasTotales
DROP TABLE #CuentasConPrimerasCuotas
DROP TABLE #CuentasConSeñas
DROP TABLE #CuentasAnuladas
DROP TABLE #CuentasCanceladas
DROP TABLE #Meses
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 esta consulta

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (59 intervenciones) el 18/05/2011 10:38:04
Creo que para eso se inventó el JOIN.
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 Isaias

SOLUCIONADO

Publicado por Isaias (3186 intervenciones) el 25/05/2011 21:22:44
Para no hacer uso de tablas temporales, puedes utilizar CASE WHEN THEN END, 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