none
Duvida contagem de registro RRS feed

  • Pergunta

  • Amigos,

     

    estou tentando contabilizar a quantidade de registro divido por Ano/Mes aberto por serviço mas não estou conseguinto obter o resultado esperado.

     

    Code Snippet

    Resultado

     

     

    Resultado Esperado

    Ano/Mês

    Qtde

    Serviço

     

    Ano/Mês

    Qtde

    Serviço

    200802

    2

    55

     

    200802

    2

    55

    200802

    3

    108

     

    200802

    23

    108

    200802

    2

    26

     

    200802

    2

    26

    200802

    9

    108

     

    200802

    1

    107

    200802

    3

    108

     

    Total

    28

     

    200802

    1

    108

     

     

     

     

    200802

    1

    107

     

     

     

     

    200802

    1

    108

     

     

     

     

    200802

    2

    108

     

     

     

     

    200802

    2

    108

     

     

     

     

    200802

    2

    108

     

     

     

     

    Total

    28

     

     

     

    Segue o select:

     

    select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,
    count(Account_ID) as Qtde, Action_id
    from dbo.D_Status_Atual_Acao_Cobraca_Oi
    group by  Ultima_Dt_Exec,Action_id
    order by 1 desc

     

     

    quinta-feira, 14 de fevereiro de 2008 20:21

Respostas

  • Oooooops,

     

    Esqueci um pedaço. Tente o seguinte:

     

    Code Snippet

    Select asnomes, Action_Id, sum(Qtde) as Quantidade

    FROM

    (select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,

    count(Account_ID) as Qtde, Action_id

    from dbo.D_Status_Atual_Acao_Cobraca_Oi

    group by Ultima_Dt_Exec,Action_id) As SubQ

    Group by asnomes, Action_id

    Order By asnomes, Action_id

     

     

    Bom, vamos então aos detalhes da implementação. O SELECT que você postou tem parte do resultado necessário. Como não sei o nomes das colunas, JOINs envolvidos, etc mas sei que o seu SELECT tem o que eu preciso, resolvi fazer um SELECT de um SELECT (no caso um SELECT do seu SELECT).

     

    Esse tipo de construção é conhecida como Derived Tables (ou tabelas derivadas). Só que para aplicar a técnica de Derived Tables é preciso que se dê um apelido para o SELECT mais interno já que posso fazer JOINs e outras operações que necessitem desse nome. Por se tratar de uma Subquery coloquei As SUBQ, mas você poderia colocar qualquer outro nome.

     

    Faça o teste agora.

     

    [ ]s,

     

    Gustavo

     

     

     

    quinta-feira, 14 de fevereiro de 2008 21:01

Todas as Respostas

  • Olá Daniel,

     

    Como não estou a par das colunas envolvidas e nem dispomos do SQL Server 2005 para usar uma CTE, vamos reaproveitar o seu SELECT como uma Derived Table. Tente fazer o seguinte:

     

    Code Snippet

    Select asnomes, Action_Id, sum(Qtde) as Quantidade

    FROM

    (select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,

    count(Account_ID) as Qtde, Action_id

    from dbo.D_Status_Atual_Acao_Cobraca_Oi

    group by Ultima_Dt_Exec,Action_id) As SubQ

    Order By asnomes, Action_id

     

     

    [ ]s,

     

    Gustavo

     

    quinta-feira, 14 de fevereiro de 2008 20:47
  • Gustavo,

     

    tá dando este erro

    Mas tb não entendi o porque do 'AS SUBQ depois do group by?

     

    Server: Msg 8118, Level 16, State 1, Line 1
    Column 'SubQ.anomes' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
    Server: Msg 8118, Level 16, State 1, Line 1
    Column 'SubQ.Action_Id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
    quinta-feira, 14 de fevereiro de 2008 20:56
  • Oooooops,

     

    Esqueci um pedaço. Tente o seguinte:

     

    Code Snippet

    Select asnomes, Action_Id, sum(Qtde) as Quantidade

    FROM

    (select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,

    count(Account_ID) as Qtde, Action_id

    from dbo.D_Status_Atual_Acao_Cobraca_Oi

    group by Ultima_Dt_Exec,Action_id) As SubQ

    Group by asnomes, Action_id

    Order By asnomes, Action_id

     

     

    Bom, vamos então aos detalhes da implementação. O SELECT que você postou tem parte do resultado necessário. Como não sei o nomes das colunas, JOINs envolvidos, etc mas sei que o seu SELECT tem o que eu preciso, resolvi fazer um SELECT de um SELECT (no caso um SELECT do seu SELECT).

     

    Esse tipo de construção é conhecida como Derived Tables (ou tabelas derivadas). Só que para aplicar a técnica de Derived Tables é preciso que se dê um apelido para o SELECT mais interno já que posso fazer JOINs e outras operações que necessitem desse nome. Por se tratar de uma Subquery coloquei As SUBQ, mas você poderia colocar qualquer outro nome.

     

    Faça o teste agora.

     

    [ ]s,

     

    Gustavo

     

     

     

    quinta-feira, 14 de fevereiro de 2008 21:01
  • Mais uma vez obrigado pela ajuda e explicação.

     

    Um grande abraço

    quinta-feira, 14 de fevereiro de 2008 21:11