주 콘텐츠로 건너뛰기

 none
Es posible hacer esto??? RRS feed

  • 질문

  • hola  a todos

    Es posible realizar por medio de una consulta sql el siguiente reporte.

                                Lunes            Martes             Miercoles  

                              01/03/2019   02/03/2019     03/03/2019

    Ventas netas            50                  70               60

      Mesa                       30                  40                40

      Domicilio                  20                  30               20

      TOTAL                     50                 70              60

    Contar clientes

      Mesa                         8                  10               10

      Domicilio                    4                   8                6

     TOTAL                       12                18              16

    A continuaciòn el sql que he realizado.

    SELECT  SUM(PH.NETTOTAL) AS NETTOTAL
    ,PH.OPENDATE AS OPENDATE
    ,SUM(PH.NUMCUST) AS NUMCUST
    FROM DBA.POSHEADER PH
    WHERE PH.OPENDATE>=20190301 AND PH.OPENDATE<=20190303
    GROUP BY PH.OPENDATE
    ORDER BY PH.OPENDATE ASC

    Resultado de mi consulta:

    NETTOTAL  OPENDATE         NUMCUST

    50               01/03/2019           12

    60               02/03/2019           18

    70               03/03/2019           16

    No se me ocurre como colocar de la siguiente manera:

                              Lunes                  Martes       Mièrcoles

                              01/03/2019        02/03/2019   03/03/2019 

    Ventas Netas        50                       60                 70

    Y lo mismo para el caso de contar clientes.

    :(

    Acudo  a todos los que me puedan echar una mano con esto.

    Espero me puedan ayudar.

    De ante mano mucha gracias.





    • 편집됨 NancyMa 2019년 9월 22일 일요일 오후 10:47
    2019년 9월 22일 일요일 오후 10:35

모든 응답

  • ¿Y en qué columna está la información sobre si la venta fue a "mesa" o a "domicilio"?

    ¿Qué contiene la columna NUMCUST?

    Si el número de clientes debe ser contado, ¿no sería el caso de utilizar la función count()?

    ¿Cómo se declaró la columna OPENDATE?

    Me parece que la solución implica la transposición de la matriz (que no debe confundirse con pivote).

    ---

    Considerando los valores de fecha estáticos, aquí hay un ejemplo:

    -- código #1
    ;with 
    Consulta as (
    SELECT PH.OPENDATE,
           sum (PH.NETTOTAL) as [Ventas netas],
           sum (PH.NUMCUST) as [Contar clientes]
      from DBA.POSHEADER PH
      where PH.OPENDATE >= '20190301' AND PH.OPENDATE <= '20190303'
      group by PH.OPENDATE
    ),
    Consulta_2 as (
    SELECT OPENDATE, valor, coluna
      from Consulta
           unpivot (valor for coluna in ([Ventas netas], [Contar clientes])) as U
    )
    SELECT coluna as Tipo, [20190301], [20190302], [20190303]
      from Consulta_2
           pivot (max (valor) for OPENDATE in ([20190301], [20190302], [20190303])) as P;

    No he probado; puede contener error(es).

     

    Si esta respuesta te ayudó a resolver tu problema, recuerda marcarla.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • 편집됨 José Diz 2019년 9월 23일 월요일 오전 11:51
    • 답변으로 제안됨 Pablo RubioModerator 2019년 9월 25일 수요일 오후 6:25
    2019년 9월 23일 월요일 오전 12:07