Usuário com melhor resposta
Duvida contagem de registro

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 SnippetResultado
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
Respostas
-
Oooooops,
Esqueci um pedaço. Tente o seguinte:
Code SnippetSelect
asnomes, Action_Id, sum(Qtde) as QuantidadeFROM
(
select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,count
(Account_ID) as Qtde, Action_idfrom
dbo.D_Status_Atual_Acao_Cobraca_Oigroup
by Ultima_Dt_Exec,Action_id) As SubQGroup
by asnomes, Action_idOrder
By asnomes, Action_idBom, 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
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 SnippetSelect
asnomes, Action_Id, sum(Qtde) as QuantidadeFROM
(
select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,count
(Account_ID) as Qtde, Action_idfrom
dbo.D_Status_Atual_Acao_Cobraca_Oigroup
by Ultima_Dt_Exec,Action_id) As SubQOrder
By asnomes, Action_id[ ]s,
Gustavo
-
Gustavo,
tá dando este erro
Mas tb não entendi o porque do 'AS SUBQ depois do group by?
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. -
Oooooops,
Esqueci um pedaço. Tente o seguinte:
Code SnippetSelect
asnomes, Action_Id, sum(Qtde) as QuantidadeFROM
(
select year(Ultima_Dt_Exec) * 100 + month(Ultima_Dt_Exec)as anomes,count
(Account_ID) as Qtde, Action_idfrom
dbo.D_Status_Atual_Acao_Cobraca_Oigroup
by Ultima_Dt_Exec,Action_id) As SubQGroup
by asnomes, Action_idOrder
By asnomes, Action_idBom, 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
-