Ver Mensaje Individual
  #8  
Antiguo 25-02-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Reputación: 22
fjcg02 Va camino a la fama
Cita:
Empezado por Gallosuarez Ver Mensaje
Srs.

Propongo otra solución mas rápida y robusta (creo yo). Utilizo CTE (Common Table Expressions). Funciona para la versión 2.1 en adelante.
Código SQL [-]
WITH USUARIO_TOTAL AS (
  SELECT USUARIO, TIPO, SUM(IMPORTE) AS TOTAL, COUNT(*) AS QTY
  FROM USUARIOS
  GROUP BY USUARIO, TIPO
)
SELECT DISTINCT U.USUARIO, GASTO.QTY AS GASTO_QTY, GASTO.TOTAL AS GASTO, 
  INGRESO.QTY AS INGRESO_QTY, INGRESO.TOTAL AS INGRESO
FROM USUARIOS U
  LEFT JOIN USUARIO_TOTAL GASTO
    ON U.USUARIO = GASTO.USUARIO AND GASTO.TIPO = 'Gasto'
  LEFT JOIN USUARIO_TOTAL INGRESO
    ON U.USUARIO = INGRESO.USUARIO AND INGRESO.TIPO = 'Ingreso';
Espero que sirva de algo...

Saludos

Gerardo Suárez Trejo
Está muy bien, pero sigues necesitando saber previamente cuantos valores de TIPO tienes para sacar los datos. Imaginate que en el campo tipo tienes los valores UNO, DOS, TRES, CUATRO, CINCO, o los que te de la gana.

¿ Cómo pones las columnas siguientes sin modificar tu código ?
USUARIO, UNO, DOS, TRES, CUATRO, CINCO
Queda sin resolver el problema.

Por otro lado hay componentes como los de devexpress y otros que te permiten hacerlo, incluso creo que fastreport también tiene un componente para generar listados de esta manera, pero bajo mi punto de vista, prefiero poner la información en pantalla y que el usuario laimprima cuando realmente lo necesite. Ahora, mi experiencia con ellos no ha sido muy buena - no me refiero al componente de devexpress ya que no lo conozco - .
Ahora, esta solución es gratis y no necesitas soltar eurakos o dolares por delante.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita