Autor Tópico: Ajuda pra construir uma consulta  (Lida 1267 vezes)

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Ajuda pra construir uma consulta
« Online: Outubro 06, 2012, 04:41:33 pm »
Pessoal, não estou conseguindo criar uma consulta um pouco diferente do comum, por isso peço a ajuda dos universitários!

Tenho uma tabela mysql com 3 campos:
Data (DATE)
Loja (INT 11)
Guia_Digitada (INT 1)

Preciso estabelecer um filtro inicial por período entre datas, digamos que no exemplo o usuário informe de 01/10/2012 a 31/10/2012. Este filtro também pode ser por mês/ano caso facilite. A ideia é que seja sempre mensal.

A consulta deve mostrar os dias do mês em colunas e as lojas em linhas
             01|02|03|04|05...|31
Loja 1
Loja 2
Loja 3
...

A interseção entre loja e dia deve 'pintar' de cinza se o campo 'Guia_Digitada' for 1 ou deixar em branco se for 0.
Já vi um exemplo disso mas não lembro onde, é algo relacionado a cross-tab ou matriz, não sei ao certo.
Alguém pode me ajudar com isso?
Grato a todos!
Rodrigo
Rodrigo Araújo

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:Ajuda pra construir uma consulta
« Responder #1 Online: Outubro 11, 2012, 01:28:17 pm »
Ninguém arrisca um palpite?
Rodrigo Araújo

Haroldo

  • Expert
  • *****
  • Mensagens: 6286
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Ajuda pra construir uma consulta
« Responder #2 Online: Outubro 11, 2012, 02:01:43 pm »
http://www.scriptcase.com.br/sistemas/v5/exemplos_pt_br/grid29/grid29.php

Gráfico do tipo pivot.

instale o projeto de exemplos que já vem com sc.


rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:Ajuda pra construir uma consulta
« Responder #3 Online: Outubro 11, 2012, 02:29:20 pm »
Valeu Haroldo, vou dar uma olhada.
Obrigado.
Rodrigo Araújo

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Ajuda pra construir uma consulta
« Responder #4 Online: Outubro 15, 2012, 02:30:10 am »
eu ja fiz consultas dentros de consultas para obter um resultado parecido com o que voce quer, abaixo descrevo como deve ficar query e no scriptcase dependendo do valor da nota fiscal eu coloco um cor diferente

Se voce quiser posso enviar esse banco em postgresql para voce no seu email.

exemplo:
como deve fica a consulta:

     Pais                        Cliente                            Nota Fiscal                         Valor
      P1                            C1                                    NF1                                nnn.nnn,nn
      P1                            C1                                    NF2                                nnn.nnn,nn
      P1                            C1                                    Total Cliente                   nnn.nnn,nn
      P1                            C2                                    NF3                                nnn.nnn,nn
      P1                            C2                                    NF4                                nnn.nnn,nn
      P1                            C2                                    Total Cliente                   nnn.nnn,nn
      P1                           Total Pais                                                                 nnn.nnn,nn
      P2                            C3                                    NF5                                nnn.nnn,nn
      P2                            C3                                    NF6                                nnn.nnn,nn
      P2                            C3                                    Total Cliente                   nnn.nnn,nn
      P2                            C4                                    NF7                                nnn.nnn,nn
      P2                            C4                                    NF8                                nnn.nnn,nn
      P2                            C4                                   Total Cliente                    nnn.nnn,nn
      P2                            Total País                                                                nnn.nnn,nn
      Total Geral                                                                                              nnn.nnn,nn

sql para  o problema acima


SELECT
tb_externa.pais_titulo                     AS      "Pais",
tb_externa.clie_nome                        AS      "Cliente",
tb_externa.nota_fiscal                     AS      "Nota Fiscal",
TRANSLATE (TO_CHAR (tb_externa.val, '999,999,999.99'), ',.', '.,')
AS      "Valor"
FROM
(
(
SELECT
         TO_CHAR (pais.pais_codigo, '9999')      AS         pais_codigo,
         pais.pais_titulo                              AS         pais_titulo,
TO_CHAR (clie.clie_codigo, '999999')   AS         clie_codigo,
clie.clie_nome                                 AS         clie_nome,
TO_CHAR (nofi.nofi_nota_fiscal, '999999')
AS         nota_fiscal,
                  SUM (item.item_qtd_produto  *  item.item_vlr_unitario)
AS         val
FROM
sc_ads03_vendas_v1.pais               pais,
sc_ads03_vendas_v1.cliente            clie,
sc_ads03_vendas_v1.nota_fiscal        nofi,
sc_ads03_vendas_v1.item_nota_fiscal   item
         WHERE
                  pais.pais_codigo        =   clie.pais_codigo
         AND      clie.clie_codigo        =   nofi.clie_codigo
         AND      nofi.nofi_nota_fiscal   =   item.nofi_nota_fiscal
         GROUP BY
                  pais.pais_codigo,
pais.pais_titulo,
clie.clie_codigo,
clie.clie_nome,
nofi.nofi_nota_fiscal
         )
         UNION ALL
(
SELECT
         TO_CHAR (pais.pais_codigo, '9999')      AS         pais_codigo,
         pais.pais_titulo                              AS         pais_titulo,
TO_CHAR (clie.clie_codigo, '999999')   AS         clie_codigo,
clie.clie_nome                                 AS         clie_nome,
'Total do Cliente'                           AS         nota_fiscal,
                  SUM (item.item_qtd_produto  *  item.item_vlr_unitario)
AS         val
FROM
sc_ads03_vendas_v1.pais               pais,
sc_ads03_vendas_v1.cliente            clie,
sc_ads03_vendas_v1.nota_fiscal        nofi,
sc_ads03_vendas_v1.item_nota_fiscal   item
         WHERE
                  pais.pais_codigo        =   clie.pais_codigo
         AND      clie.clie_codigo        =   nofi.clie_codigo
         AND      nofi.nofi_nota_fiscal   =   item.nofi_nota_fiscal
         GROUP BY
                  pais.pais_codigo,
pais.pais_titulo,
clie.clie_codigo,
clie.clie_nome

         )
         UNION ALL
(
SELECT
         TO_CHAR (pais.pais_codigo, '9999')      AS         pais_codigo,
         pais.pais_titulo                              AS         pais_titulo,
'999999'                                       AS         clie_codigo,
'Total do País'                              AS         clie_nome,
' '                                             AS         nota_fiscal,
                  SUM (item.item_qtd_produto  *  item.item_vlr_unitario)
AS         val
FROM
sc_ads03_vendas_v1.pais               pais,
sc_ads03_vendas_v1.cliente            clie,
sc_ads03_vendas_v1.nota_fiscal        nofi,
sc_ads03_vendas_v1.item_nota_fiscal   item
         WHERE
                  pais.pais_codigo        =   clie.pais_codigo
         AND      clie.clie_codigo        =   nofi.clie_codigo
         AND      nofi.nofi_nota_fiscal   =   item.nofi_nota_fiscal
         GROUP BY
                  pais.pais_codigo,
pais.pais_titulo
         )
         UNION ALL
(
SELECT
         '9999'                                          AS         pais_codigo,
         'Total Geral'                                 AS         pais_titulo,
'999999'                                       AS         clie_codigo,
' '                                             AS         clie_nome,
' '                                             AS         nota_fiscal,
                  SUM (item.item_qtd_produto  *  item.item_vlr_unitario)
AS         val
FROM
sc_ads03_vendas_v1.pais               pais,
sc_ads03_vendas_v1.cliente            clie,
sc_ads03_vendas_v1.nota_fiscal        nofi,
sc_ads03_vendas_v1.item_nota_fiscal   item
         WHERE
                  pais.pais_codigo        =   clie.pais_codigo
         AND      clie.clie_codigo        =   nofi.clie_codigo
         AND      nofi.nofi_nota_fiscal   =   item.nofi_nota_fiscal
         )
      )         tb_externa
ORDER BY
tb_externa.pais_codigo,
tb_externa.clie_codigo,
tb_externa.nota_fiscal


Att Arquimedes
« Última modificação: Outubro 15, 2012, 02:47:26 am por Arquimedes »

rrma

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 816
  • Quem com porcos se mistura tanto bate até que fura
    • Email
Re:Ajuda pra construir uma consulta
« Responder #5 Online: Outubro 15, 2012, 03:02:53 am »
Arquimedes, obrigado pela dica, mas acabe resolvendo com um pouco de codificação e algumas queries em sequencia. Preferi não esquentar muito a cabeça com tsql.

Agora, esse código seu é digno de estudo, parabéns!
Rodrigo
Rodrigo Araújo

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:Ajuda pra construir uma consulta
« Responder #6 Online: Novembro 24, 2012, 10:36:35 am »
Olá rrma.
Se for possível daria para você publicar como foi resolvido?

Obrigado
Celso R.
________________________________
SC - V 8