Cuadro con totales

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Cuadro con totales

    buenas compañeros:

    tengo que realizar un cuadro en sql que me muestre la informacion de dos tablas:
    1- el total de pacientes por turno (son 3 turnos)--ya esta parte la hice con una vista.
    Código:
    SELECT  TOP 100 PERCENT Diag_turno, COUNT(Pk_id_diagnostico) AS total
    FROM dbo.Tbl_Registro_Atencion
    GROUP BY Diag_turno
    HAVING      (Diag_turno = N'1') OR
                          (Diag_turno = N'2') OR
                          (Diag_turno = N'3')
    ORDER BY Diag_turno
    2- el total de sexo M y F por turno (son 3 turnos)
    3- el total de las 3 columnas (pacientes, M, F)

    pense realizar tres vistas y despues agrupar en una 4 pero es complicado estoy enredados con los conceptos en las consultas. me podrian ayudar porfa

  • #2
    Re: Cuadro con totales

    Hola puchungon, lo que estás describiendo se llama consulta de referencias cruzadas o de doble entrada.

    Ejemplo:
    Código:
    ┌───────┬───────┬───┬───┐
    │ Turno │ Total │ F │ M │
    ├───────┼───────┼───┼───┤
    │   1   │   5   │ 3 │ 2 │
    │   2   │   8   │ 1 │ 7 │
    │   3   │  11   │ 8 │ 3 │
    └───────┴───────┴───┴───┘
    Se usa cuando se desea una presentación distinta de la que ofrece la consulta de doble agrupamiento:
    Código:
    ┌───────┬──────┬──────────┐
    │ Turno │ Sexo │ Cantidad │
    ├───────┼──────┼──────────┤
    │   1   │  F   │    3     │
    │   1   │  M   │    2     │
    │   2   │  F   │    1     │
    │   2   │  M   │    7     │
    │   3   │  F   │    8     │
    │   3   │  M   │    3     │
    └───────┴──────┴──────────┘
    Las respectivas SQL son:
    [highlight=sql]
    TRANSFORM
    COUNT(Sexo)
    SELECT
    Diag_turno, COUNT(Sexo) AS Total
    FROM
    Tbl_Registro_Atencion R
    INNER JOIN
    Tbl_Pacientes P
    ON
    R.FK_id_paciente = P.PK_id_paciente
    GROUP BY
    Diag_turno
    ORDER BY
    Diag_turno
    PIVOT
    Sexo;
    [/highlight]
    [highlight=sql]
    SELECT
    Diag_turno, P.Sexo, COUNT(P.Sexo) AS Cantidad
    FROM
    Tbl_Registro_Atencion R
    INNER JOIN
    Tbl_Pacientes P
    ON
    R.FK_id_paciente = P.PK_id_paciente
    GROUP BY
    Diag_turno, P.Sexo
    ORDER BY
    Diag_turno;
    [/highlight]
    Saludos.
    Saludos.

    Comentario


    • #3
      Re: Cuadro con totales

      Gracias compañero, pero ahora tengo un problema el sql que tengo es 2003 y cuando ejecfuto la consulta con el comando TRANSFORM y PIVOT me manda error como si no me los pudiera reconocer, no se arreglar eso.

      Comentario


      • #4
        Re: Cuadro con totales

        Revisa la versión de tu SQL Server, no existe la 2003
        Ing. Isaías Islas González
        MCP MCTS SQL Server 2008

        Share what you know, learn what you don't

        Comentario


        • #5
          Re: Cuadro con totales

          Parece que TRANSFORM no está soportado en SQL Server®.

          Tanto TRANSFORM como PIVOT no son parte del ANSI SQL, pero a partir de la versión 9.0 (SQL Server® 2005) se puede utilizar PIVOT:
          Código:
          SELECT
              Diag_turno, [0] AS F, [1] AS M, [0] + [1] AS Total
          FROM
              (
              SELECT
                  Pk_id_diagnostico, Diag_turno, Sexo
              FROM       
                  Tbl_Registro_Atencion R
              INNER JOIN
                  Tbl_Pacientes P
              ON
                  R.FK_id_paciente = P.PK_id_paciente
              )
              AS Tabla_temp
          PIVOT
              (
              COUNT(Pk_id_diagnostico)
              FOR
                  Sexo
              IN
                  ([0], [1])
              )
              AS Pivote;
          Más info en:
          https://msdn.microsoft.com/en-us/library/ms177634.aspx

          Para versiones anteriores lo único que se me ocurrió es:
          Código:
          SELECT
              R.Diag_turno,
              COUNT(Sexo) AS F,
              (
                  SELECT
                      COUNT(Sexo)
                  FROM
                      Tbl_Registro_Atencion R2
                  INNER JOIN
                      Tbl_Pacientes P2
                  ON
                      R2.FK_id_paciente = P2.PK_id_paciente
                  WHERE
                      R2.Diag_turno = R.Diag_turno
              )
              - COUNT(Sexo) AS M,
              (
                  SELECT
                      COUNT(Sexo)
                  FROM
                      Tbl_Registro_Atencion R2
                  INNER JOIN
                      Tbl_Pacientes P2
                  ON
                      R2.FK_id_paciente = P2.PK_id_paciente
                  WHERE
                      R2.Diag_turno = R.Diag_turno
              )
              AS Total
          FROM       
              Tbl_Registro_Atencion R
          INNER JOIN
              Tbl_Pacientes P
          ON
              R.FK_id_paciente = P.PK_id_paciente
          WHERE
              Sexo = 0
          GROUP BY
              R.Diag_turno;
          Saludos.
          Saludos.

          Comentario


          • #6
            Re: Cuadro con totales

            Buenas compañero, la consulta qie me enviaste en el primer mensaje si funciona me muestra los datos de manera vertical, pero estoy tratando de meter esos datos en una tabla temporal que me permita mostrar Turno, M, F, Total de manera vertical.

            Código:
            SELECT
                Diag_turno as turno,
                 COUNT(Pk_id_diagnostico) AS total,
                   Tbl_Paciente.pac_sexo as sexo,
                     COUNT(Tbl_Paciente.pac_sexo) AS Cantidad   
            FROM
                   Tbl_Registro_Atencion
                INNER JOIN
                    Tbl_Paciente
                ON
                  Tbl_Registro_Atencion.Diag_id = Tbl_Paciente.pac_id
                GROUP BY
                    Diag_turno, Tbl_Paciente.pac_sexo    
                ORDER BY
                    Diag_turno

            Comentario


            • #7
              Re: Cuadro con totales

              Eso precisamente hace la consulta PIVOT (a partir de SQL Server® 2005) o la otra consulta con SELECTs anidados (para versiones previas).

              Te las pasé en mi mensaje anterior, junto con el enlace a la página donde Microsoft® enseña cómo utilizar PIVOT, ¿las estudiaste?

              IIslas te aconsejó que revisaras la versión de SQL Server®, ¿lo hiciste?

              Es necesario, entre otras cosas, para saber si puedes usar PIVOT.

              Saludos.
              Saludos.

              Comentario


              • #8
                Re: Cuadro con totales

                Si compañero estube con lo de la informacion que me diste sobre el pivot, pero no funciona pq la version del sql es 2000, lo que no supe explicar fue si ya la informacion de la consulta me la trea en horizontal, entiendo que con el pivot seria vertical pero no sera posible meter esa informacion de la consulta en una tabla temporal de manera vertical y asi poder mostrar el informe.

                Seria algo asi los canpos: Turno, M, F, Total.

                Comentario


                • #9
                  Re: Cuadro con totales

                  Con SQL Server® 2000 queda descartado el uso de PIVOT, en su lugar puedes utilizar la consulta con SELECTs anidados que te mostré más arriba.

                  El resultado lo trae de la siguiente forma:
                  Código:
                  ┌────────────┬───┬───┬───────┐
                  │ Diag_turno │ F │ M │ Total │
                  ├────────────┼───┼───┼───────┤
                  │      1     │ 5 │ 3 │   8   │
                  │      2     │ 8 │ 1 │   9   │
                  │      3     │ 1 │ 8 │   9   │
                  └────────────┴───┴───┴───────┘
                  Saludos.
                  Saludos.

                  Comentario


                  • #10
                    Re: Cuadro con totales

                    Buenas conpañeros, ya lo hice pero con vistas:
                    1- vista para los F
                    2- vista para los M
                    3- vista para agrupar y sacar los totales entre los dos sexo.

                    solo me hace falta una parte sumar esas columnas.
                    Última edición por puchungon; 03-03-2015, 03:14 PM.

                    Comentario


                    • #11
                      Re: Cuadro con totales

                      Buenas compañeros gracias por la ayuda ya lo pude resolver con una funcion en el reporte.

                      Comentario


                      • #12
                        Re: Cuadro con totales

                        Buenas compañeros ya habia realizado el informe global de los registros mediante vistas, pero hay un problemas el informe va condicionado por rango de fecha DESDE(FECHA1) , HASTA(FECHA2), de ahy me debe mostrar que Turno es, cuantos M, cuantos F y el total de la suma de M+F, ACLARO ES CON SQL SERVER 2000.

                        Comentario


                        • #13
                          Re: Cuadro con totales

                          Hola puchungon, habría que ver cómo son las vistas y cómo lográs que el SQL Server® 2000 reconozca el rango de fechas.
                          Saludos.

                          Comentario


                          • #14
                            Re: Cuadro con totales

                            Buenas como utiliza vb6 con sql server 2000, se debe usar con datapicker para ingresar el rango de fecha en la consulta sql, pero como jugar con el sexo si fuera global muy bien porque se puede hacer vistas:
                            1- vista que me cuento los Masculino
                            2- vista que me cuente los Femeninos
                            3- vista que me sume maculino y femenino en un total.
                            Pero no es el caso debe ser por rango ya no se que hacer trate de hacerlo con subcobnsultas pero no me funciona.

                            Hice una vista con los canpos que nesecito ya que los canpos estan en dos tablas Tbl_paciente(sexo), Tbl_Registro_Atencion(Fecha, turno, pk_llave)

                            Comentario


                            • #15
                              Re: Cuadro con totales

                              Hola puchungon, lamentablemente no dice qué parte de la subconsulta no funciona. Tratándose de rangos de fechas, la solución sería tan sencilla como agregar una condición en la parte del WHERE, usando, por ejemplo, BETWEEN.

                              En cuanto a las vistas es tan escueta la información suministrada que se hace difícil poder recomendar alguna solución. Tampoco sabemos por qué está usando esta alternativa que no permite parámetros. En forma muy general se le puede aconsejar el uso de funciones.
                              Saludos.

                              Comentario

                              Trabajando...
                              X