Jump to content

Como colocar isto bonito... e não em forma de matriz identidade


Tesla
 Share

Recommended Posts

SELECT (SELECT conta FROM pcsa WHERE mes=1 and ano=2009 and conta=temp1.conta and temp1.mes=1 and temp1.ano=2009) as 'Janeiro'
, (SELECT cre-deb FROM pcsa WHERE mes=1 and ano=2009 and conta=temp1.conta and temp1.mes=1 and temp1.ano=2009) as 'saldojan'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=1 and ano=2009 and conta=temp1.conta and temp1.mes=1 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=12 and ano=2008 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=12 and ano=2008 and conta=temp1.conta))) as 'desviojan'
, (SELECT conta FROM pcsa WHERE mes=2 and ano=2009 and conta=temp1.conta and temp1.mes=2 and temp1.ano=2009) as 'Fevereiro'
, (SELECT cre-deb FROM pcsa WHERE mes=2 and ano=2009 and conta=temp1.conta and temp1.mes=2 and temp1.ano=2009) as 'saldofev'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=2 and ano=2009 and conta=temp1.conta and temp1.mes=2 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=1 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=1 and ano=2009 and conta=temp1.conta))) as 'desviofev'
, (SELECT conta FROM pcsa WHERE mes=3 and ano=2009 and conta=temp1.conta and temp1.mes=3 and temp1.ano=2009) as 'Marco'
, (SELECT cre-deb FROM pcsa WHERE mes=3 and ano=2009 and conta=temp1.conta and temp1.mes=3 and temp1.ano=2009) as 'saldomar'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=3 and ano=2009 and conta=temp1.conta and temp1.mes=3 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=2 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=2 and ano=2009 and conta=temp1.conta))) as 'desviomar'
, (SELECT conta FROM pcsa WHERE mes=4 and ano=2009 and conta=temp1.conta and temp1.mes=4 and temp1.ano=2009) as 'Abril'
, (SELECT cre-deb FROM pcsa WHERE mes=4 and ano=2009 and conta=temp1.conta and temp1.mes=4 and temp1.ano=2009) as 'saldoabr'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=4 and ano=2009 and conta=temp1.conta and temp1.mes=4 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=3 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=3 and ano=2009 and conta=temp1.conta))) as 'desvioabr'
, (SELECT conta FROM pcsa WHERE mes=5 and ano=2009 and conta=temp1.conta and temp1.mes=5 and temp1.ano=2009) as 'Maio'
, (SELECT cre-deb FROM pcsa WHERE mes=5 and ano=2009 and conta=temp1.conta and temp1.mes=5 and temp1.ano=2009) as 'saldomai'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=5 and ano=2009 and conta=temp1.conta and temp1.mes=5 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=4 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=4 and ano=2009 and conta=temp1.conta))) as 'desviomai'
, (SELECT conta FROM pcsa WHERE mes=6 and ano=2009 and conta=temp1.conta and temp1.mes=6 and temp1.ano=2009) as 'Junho'
, (SELECT cre-deb FROM pcsa WHERE mes=6 and ano=2009 and conta=temp1.conta and temp1.mes=6 and temp1.ano=2009) as 'saldojun'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=6 and ano=2009 and conta=temp1.conta and temp1.mes=6 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=5 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=5 and ano=2009 and conta=temp1.conta))) as 'desviojun'
, (SELECT conta FROM pcsa WHERE mes=7 and ano=2009 and conta=temp1.conta and temp1.mes=7 and temp1.ano=2009) as 'Julho'
, (SELECT cre-deb FROM pcsa WHERE mes=7 and ano=2009 and conta=temp1.conta and temp1.mes=7 and temp1.ano=2009) as 'saldojul'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=7 and ano=2009 and conta=temp1.conta and temp1.mes=7 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=6 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=6 and ano=2009 and conta=temp1.conta))) as 'desviojul'
, (SELECT conta FROM pcsa WHERE mes=8 and ano=2009 and conta=temp1.conta and temp1.mes=8 and temp1.ano=2009) as 'Agosto'
, (SELECT cre-deb FROM pcsa WHERE mes=8 and ano=2009 and conta=temp1.conta and temp1.mes=8 and temp1.ano=2009) as 'saldoago'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=8 and ano=2009 and conta=temp1.conta and temp1.mes=8 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=7 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=7 and ano=2009 and conta=temp1.conta))) as 'desvioago'
, (SELECT conta FROM pcsa WHERE mes=9 and ano=2009 and conta=temp1.conta and temp1.mes=9 and temp1.ano=2009) as 'Setembro'
, (SELECT cre-deb FROM pcsa WHERE mes=9 and ano=2009 and conta=temp1.conta and temp1.mes=9 and temp1.ano=2009) as 'saldoset'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=9 and ano=2009 and conta=temp1.conta and temp1.mes=9 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=8 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=8 and ano=2009 and conta=temp1.conta))) as 'desvioset'
, (SELECT conta FROM pcsa WHERE mes=10 and ano=2009 and conta=temp1.conta and temp1.mes=10 and temp1.ano=2009) as 'Outubro'
, (SELECT cre-deb FROM pcsa WHERE mes=10 and ano=2009 and conta=temp1.conta and temp1.mes=10 and temp1.ano=2009) as 'saldoout'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=10 and ano=2009 and conta=temp1.conta and temp1.mes=10 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=9 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=9 and ano=2009 and conta=temp1.conta))) as 'desvioout'
, (SELECT conta FROM pcsa WHERE mes=11 and ano=2009 and conta=temp1.conta and temp1.mes=11 and temp1.ano=2009) as 'Novembro'
, (SELECT cre-deb FROM pcsa WHERE mes=11 and ano=2009 and conta=temp1.conta and temp1.mes=11 and temp1.ano=2009) as 'saldonov'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=11 and ano=2009 and conta=temp1.conta and temp1.mes=11 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=10 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=10 and ano=2009 and conta=temp1.conta))) as 'desvionov'
, (SELECT conta FROM pcsa WHERE mes=12 and ano=2009 and conta=temp1.conta and temp1.mes=12 and temp1.ano=2009) as 'Dezembro'
, (SELECT cre-deb FROM pcsa WHERE mes=12 and ano=2009 and conta=temp1.conta and temp1.mes=12 and temp1.ano=2009) as 'saldodez'
, (SELECT (((SELECT cre-deb FROM pcsa WHERE mes=12 and ano=2009 and conta=temp1.conta and temp1.mes=12 and temp1.ano=2009)-(SELECT cre-deb FROM pcsa WHERE 

mes=11 and ano=2009 and 
conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=11 and ano=2009 and conta=temp1.conta))) as 'desviodez'
FROM (SELECT * FROM pcsa WHERE ano=2009 AND mes BETWEEN 1 AND 12) temp1 ORDER BY temp1.mes, temp1.conta

Olá!

O código acima produz a informação que quero, mas na formatação que não quero. A formatação assemelha-se muito à Matriz Identidade. Onde os 1's correspondem à informação pretendida.

Gostaria de saber o que fazer para colocar os "1's" todos na primeira linha, isto é, como posso fazer com que o output da query seja uma tabela totalmente organizada e não uma matriz?

Obrigado pela ajuda.

Abraço.

Assinatura editada pelo staff, por favor consulte as regras.

Link to comment
Share on other sites

Assim de repente parece-me que essa query é extremamente ineficaz e pode ser rescrita com um select e um group by...

Performance à parte, não percebi o que queres fazer, ASCII/SQL Art?!?

Não percebi nada dos 1s na primeira linha, além disso o resultado de um select é uma tabela (dito de forma lata), pelo que poder usar o order by para ordenar o resultado como pretendes.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Boas.

Já encontrei a solução, no entanto vou colocá-la aqui para apreciação do código já que acredito que não seja muito eficiente. Amanhã coloco.

O objectivo da query é criar um Balancete de saldos para um determinado ano e para todos os meses, acrescentando entre cada mês uma coluna com um desvio percentual de saldo calculado entre o mês da coluna e o mês exactamente anterior.

Abraço.

Assinatura editada pelo staff, por favor consulte as regras.

Link to comment
Share on other sites

SELECT DISTINCT conta
             , Saldo_Jan=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=1 and conta=temp1.conta)
             , Desvio_Jan=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=1 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=12 and ano=(#1#-1) and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=12 and ano=(#1#-1) and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Fev=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=2 and conta=temp1.conta)
             , Desvio_Fev=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=2 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=1 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=1 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Mar=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=3 and conta=temp1.conta)
             , Desvio_Mar=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=3 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=2 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=2 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Abr=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=4 and conta=temp1.conta)
             , Desvio_Abr=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=4 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=3 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=3 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Mai=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=5 and conta=temp1.conta)
             , Desvio_Mai=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=5 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=4 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=4 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Jun=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=6 and conta=temp1.conta)
             , Desvio_Jun=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=6 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=5 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=5 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Jul=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=7 and conta=temp1.conta)
             , Desvio_Jul=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=7 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=6 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=6 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Ago=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=8 and conta=temp1.conta)
             , Desvio_Ago=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=8 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=7 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=7 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Set=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=9 and conta=temp1.conta)
             , Desvio_Set=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=9 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=8 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=8 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Out=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=10 and conta=temp1.conta)
            , Desvio_Out=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=10 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=9 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=9 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Nov=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=11 and conta=temp1.conta)
             , Desvio_Nov=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=11 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=10 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=10 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
             , Saldo_Dez=(SELECT cre-deb FROM pcsa WHERE ano=#1# and mes=12 and conta=temp1.conta)
             , Desvio_Dez=CAST(CAST(100*(SELECT (((SELECT cre-deb FROM pcsa WHERE mes=12 and ano=#1# and conta=temp1.conta)-(SELECT cre-deb FROM pcsa WHERE mes=11 and ano=#1# and conta=temp1.conta))/(SELECT cre-deb FROM pcsa WHERE mes=11 and ano=#1# and conta=temp1.conta))) as NUMERIC(10,2)) AS VARCHAR(6))+'%'
FROM (SELECT conta, cre, deb, mes, ano FROM pcsa WHERE ano=#1# AND mes between 1 and 12 and conta >= #2# and conta <=#3#) temp1 
ORDER BY conta

Aqui está o código que corre sempre que alguém necessita de analisar o dito balancete.

Acredito que não seja o melhor código, como tal agradeço toda a ajuda para o tornar mais eficiente.

Abraço e obrigado pela ajuda.

Tesla

Assinatura editada pelo staff, por favor consulte as regras.

Link to comment
Share on other sites

A tabela que a query utiliza tem as seguintes colunas

ano, mes, conta, cre, deb

O desafio aqui foi conseguir colocar tudo numa forma tabular tendo os meses e os desvios por mês como colunas da tabela a apresentar.

Eu só encontrei esta maneira de solucionar o problema, no entanto, tal como disse noutros posts, acredito piamente que o código escrito seja ineficiente. Como tal, e tendo já apresentado a estrutura da tabela e dito como deve ser feito o output da informação, gostaria imenso que me apresentassem uma melhor solução, até para poder optimizar os custos de processamento da organização onde trabalho.

Abraço.

Assinatura editada pelo staff, por favor consulte as regras.

Link to comment
Share on other sites

Boas,

a base de dados que está a utilizar faz parte de um software que já tem um PAINEL DE BORDO onde aparecem esses dado no entanto, diga-me qual a versão do software e do sql,

no IDU da analise pretendida tambem consegue colocar codigo sql para construir a analise

envio uma das formas para o que pretende

select ano,

sum(case when mes='1' then (cre - deb) else 0 end)jan,

sum(case when mes='2' then (cre - deb) else 0 end)fev,

sum(case when mes='3' then (cre - deb) else 0 end)mar,

sum(case when mes='4' then (cre - deb) else 0 end)abr,

sum(case when mes='5' then (cre - deb) else 0 end)ami,

sum(case when mes='6' then (cre - deb) else 0 end)jun,

sum(case when mes='7' then (cre - deb) else 0 end)jun,

sum(case when mes='8' then (cre - deb) else 0 end)ago,

sum(case when mes='9' then (cre - deb) else 0 end)sete,

sum(case when mes='10' then (cre - deb) else 0 end)out,

sum(case when mes='11' then (cre - deb) else 0 end)nov,

sum(case when mes='12' then (cre - deb) else 0 end)Dez

from pcsa

--where ano=2009

group by ano

César Faria

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.