Query personalizada

08/09/2011

0

Ola pessoal, joia?
SELECT 
COUNT(DISTINCT L1_lancaConv1)as L1_lancaConv1 ,COUNT(DISTINCT L2_lancaConv1) as L2_lancaConv1,
COUNT(DISTINCT L1_lancaConv2) as L1_lancaConv2,COUNT(DISTINCT L2_lancaConv2) as L2_lancaConv2,
COUNT(DISTINCT L1_lancaConv3) as L1_lancaConv3,COUNT(DISTINCT L2_lancaConv3) as L2_lancaConv3,
COUNT(DISTINCT L1_lancaConv4) as L1_lancaConv4,COUNT(DISTINCT L2_lancaConv4) as L2_lancaConv4,
COUNT(DISTINCT L1_lancaConv5) as L1_lancaConv5,COUNT(DISTINCT L2_lancaConv5) as L2_lancaConv5,
CASE MONTH(Data) 
WHEN 1 THEN 'JAN'
WHEN 2 THEN 'FEV'
WHEN 3 THEN 'MAR'
WHEN 4 THEN 'ABR'
WHEN 5 THEN 'MAI'
WHEN 6 THEN 'JUN'
WHEN 7 THEN 'JUL'
WHEN 8 THEN 'AGO'
WHEN 9 THEN 'SET'
WHEN 10 THEN 'OUT'
WHEN 11 THEN 'NOV'
WHEN 12 THEN 'DEZ'
END as [Mes]
FROM jornada
where YEAR(Data) = @Ano
group by MONTH(data)
estou utilizando a instrução sql acima.
Me retorna o resultado do correto, porem preciso que cada mes venha em uma linha.
Começando de janeiro. O resultado esta o seguinte: L1_Conv1 L2_Conv1  L1_Conv2  L2_Conv2   L1_Conv3  L2_Conv3  L1_Conv4  L2_Conv4  mes       1              1                     2              2                  1              3              2                  2         JAN       1              1                     2              2                  1              3              2                  2         FEV
 So vem o resultado referente ao mes que tem  no banco de dados,  mas eu preciso que venha todos os meses, e se não tiver nenhum valor venha "0".   L1_Conv1 L2_Conv1  L1_Conv2  L2_Conv2   L1_Conv3  L2_Conv3  L1_Conv4  L2_Conv4  mes       1              1                     2              2                  1              3              2                  2         JAN       1              1                     2              2                  1              3              2                  2         FEV       0              0                     0              0                  0              0              0                  0         MAR                                                                                                                                                 ...   Preciso que venha todos os  meses.   Obrigado 


 
Pedro Barros

Pedro Barros

Responder

Posts

18/10/2011

Gustavo Bretas

Pedro, vc ja conseguiu trazer os Meses em linhas?

Bom se ainda não tiver conseguido, eu fiz isso a pouco tempo, mas no Oracle, no SQL Server é bem mais simples de fazer, só não tenho como escrever ela pra vc porque não tenho o SQL Server disponível aqui no trabalho!

Mas faz assim:

Cria uma função que vc passa como parametro a Data Inicial e a Data Final, e a função retorne uma tabela com os campos Mês e Ano.

Eu não me lembo se tem como inserir direto no resultado, então se estiver errado corrige aí.
Dentro da função faz um While +/- assim, vamos coloar para pegar somente o mês e o ano para caso vc passe o dia inicial diferente não ter problema.

while CONVERT(VARCHAR, YEAR(@DTA_INI))+CONVERT(VARCHAR, MONTH(@DTA_INI)) < CONVERT(VARCHAR, YEAR(@DTA_FIM))+CONVERT(VARCHAR, MONTH(@DTA_FIM))
begin
	insert into return values (MONTH(@DTA_INI), YEAR(@DTA_INI))
	DATEADD(MONTH, 1, @DTA_INI)
end

Depois é só fazer o select na função como se ela fosse uma tabela, 
[code]select * from fn_mes_ano(@DTA_INI, @DTA_FIM)


Só lembrando que tentei te passar a idéia, sei que funciona, mas não tenho o SQL Server aqui para te passar o Script rodando, vc terá que adaptar a sua necessidade!

Att.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar