Vou explicar umas coisa.
Cada compilador ou interpretador tem suas particularidades.
Por isto repito: não adianta comprar o Scriptcase se você não tem paciência para ler o manual da linguagem escolhida ou mesmo da database para fazer o seu software.
Se tivesse ligado o debug do scriptcase teria visto que o mysql retorna um valor nulo nos meses sem lançamento e o php na conexão não está conseguindo interpretar o valor false retornado:
b: select count(*) from teste group by cliente (mysqlt): SELECT cliente, data, sum(if(month(data) = 1,valor,0 )) janeiro as sum_2, sum(if(month(data) = 2,valor,0 )) fevereiro as sum_3, sum(if(month(data) = 3,valor,0 )) março as sum_4, sum(if(month(data) = 4,valor,0 )) abril as sum_5 from teste group by cliente LIMIT 0,12 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘as sum_2, sum(if(month(data) = 2,valor,0 )) fevereiro as sum_3, sum(if(month(dat’ at line 1
ADOConnection._Execute(SELECT cliente, data, sum(if(month(data) = 1,valor,0 )) janeiro as sum_2, sum(if(month(data) = 2,valor,0 )) fevereiro as sum_3, ..., false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT cliente, data, sum(if(month(data) = 1,valor,0 )) janeiro as sum_2, sum(if(month(data) = 2,valor,0 )) fevereiro as sum_3, ..., false) % line 506, file: adodb-mysql.inc.php
ADODB_mysql.SelectLimit(SELECT cliente, data, sum(if(month(data) = 1,valor,0 )) janeiro as sum_2, sum(if(month(data) = 2,valor,0 )) fevereiro as sum_3, ..., 12, 0) % line 607, file: grid_teste_3_grid.class.php
grid_teste_3_grid.inicializa() % line 90, file: grid_teste_3_grid.class.php
grid_teste_3_grid.monta_grid(0) % line 1611, file: index.php[/b]
[b] Na sintaxe “group by” o comando “sum” retorna null -> do manual do mysql
SUM([DISTINCT] expr)
Returns the sum of expr. [color=green]If the return set has no rows, SUM() returns NULL.[/color] The DISTINCT keyword can be used to sum only the distinct values of expr.
SUM() returns NULL if there were no matching rows. [/b]
[b]Eu também disse neste post:
“Quem me conhece sabe que não gosto de dar resposta prontas.
Então vai algo que pode ajudar se você procurar mais coisas no manual do mysql.”
Logo, não é para colocar o que indiquei como possível solução direto no scriptcase.
É para desenvolver sua solução.
[/b]
O valores nulos estão sendo passados nos meses sem lançamento para janeiro, fevereiro, março…
Logo ele retorna: nenhuma coluna -> If the return set has no rows, SUM() returns NULL.
No mysql ele monta a consulta e mostra na tela.
No delphi os componentes de conexão estão fazendo o tratamento destes meses com null.
Agora no scriptcase não sei se é um problema no ADODB ou no framework do scriptcase em si. Mas ele pega o valor null devolvido como padrão
O importante é fazer o tratamento dos meses nulos dentro do próprio select.
Um tratamento para isto é:
select cliente, data,
sum(if(ifnull(month(data),0) = 1, valor,0 )) as janeiro,
sum(if(ifnull(month(data),0) = 2, valor,0 )) as fevereiro,
sum(if(ifnull(month(data),0) = 3, valor,0 )) as março,
sum(if(ifnull(month(data),0) = 4, valor,0 )) as abril,
sum(if(ifnull(month(data),0) = 5, valor,0 )) as maio,
sum(if(ifnull(month(data),0) = 6, valor,0 )) as junho,
sum(if(ifnull(month(data),0) = 7, valor,0 )) as julho,
sum(if(ifnull(month(data),0) = 8, valor,0 )) as agosto,
sum(if(ifnull(month(data),0) = 9, valor,0 )) as setembro,
sum(if(ifnull(month(data),0) = 10, valor,0 )) as outubro,
sum(if(ifnull(month(data),0) = 11, valor,0 )) as novembro,
sum(if(ifnull(month(data),0) = 12, valor,0 )) as dezembro
from teste
group by cliente
Olha que beleza ficou:
http://www.simaoebuhler.com.br/teste/groupby/grid_teste_1
http://www.simaoebuhler.com.br/teste/groupby/grid_teste_2