Criando coluna com valor ¬ de outras colunas...COMO?
08/10/2008
0
venho novamente solicitar
ajuda de vcs quanto a uma dúvida em um select...
tenho o seguinte select
_____________________________________________________________
SELECT LinhaT,DESCRICAO,QTD_Aces,QTD_Integ
FROM
(SELECT
(ITUR.LINHA)LinhaT,
(ln.nome) DESCRICAO,
(count(*))QTD_Aces
FROM
Cartao_Transacao ICTR,
Cartao_Acesso ICTA,
Turnos ITUR,
linha LN
WHERE ITUR.Data >= :P_Data_I
AND ITUR.Data <= :P_Data_F
AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie
AND ICTA.Transacao = ICTR.Transacao
AND ITUR.Cod_Turno = ICTA.Cod_Turno
AND ICTR.Produto not in (80,90)
AND LN.cod_Linha = ITUR.LINHA
group by ITUR.LINHA,LN.nome
)TOTAL,
(SELECT
(ITUR.LINHA)L_INTEG,
(ln.nome) DESCRICAOI,
(count(*))QTD_Integ
FROM
Cartao_Transacao ICTR,
Cartao_Acesso ICTA,
Turnos ITUR,
linha LN
WHERE ITUR.Data >= :P_Data_I
AND ITUR.Data <= :P_Data_F
AND ICTR.Tarifa >= 129
AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie
AND ICTA.Transacao = ICTR.Transacao
AND ITUR.Cod_Turno = ICTA.Cod_Turno
AND LN.cod_Linha = ITUR.LINHA
group by ITUR.LINHA,ln.nome
)INTEGRACAO
WHERE L_INTEG = LINHAT
ORDER BY LINHAT
-------------------------------------------------------------------------------------
este select retorna os valores da seguinte forma
-------------------------------------------------------------------------------------
linhat_|_descricao_|_qtd_acess_|_atq_integ_|
1____|_A________|_100______|_10_______|
2____|_B________|_200______|_10_______|
3____|_C________|_300______|_30_______|
-------------------------------------------------------------------------------------
acontece que eu preciso gerar um campo com o percentual desta turma toda, e não queria fazer isso via programa.
| ((QTD_Integ/QTD_Aces)* 100)perc
Por favor ajude-me a gerar um código para gerar a coluna percentual ai dentro. Queria que ele fica-se mais o menos desta forma
linhat_|_descricao_|_qtd_acess_|_atq_integ_|_Perc_|
1____|_A________|_100______|_10_______|_10__|
2____|_B________|_200______|_10_______|_5___|
3____|_C________|_300______|_150______|_50__|
Assim consigo deixar tudo dentro do banco
agradeço a todos desde já
Eduardo-v-a
Posts
08/10/2008
Emerson Nascimento
SELECT LinhaT, DESCRICAO, QTD_Aces, QTD_Integ, ((QTD_Integ / QTD_Aces) * 100) Perc FROM (SELECT (ITUR.LINHA)LinhaT, (ln.nome) DESCRICAO, (count(*))QTD_Aces FROM Cartao_Transacao ICTR, Cartao_Acesso ICTA, Turnos ITUR, linha LN WHERE ITUR.Data >= :P_Data_I AND ITUR.Data <= :P_Data_F AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie AND ICTA.Transacao = ICTR.Transacao AND ITUR.Cod_Turno = ICTA.Cod_Turno AND ICTR.Produto not in (80,90) AND LN.cod_Linha = ITUR.LINHA group by ITUR.LINHA,LN.nome ) TOTAL, (SELECT (ITUR.LINHA)L_INTEG, (ln.nome) DESCRICAOI, (count(*))QTD_Integ FROM Cartao_Transacao ICTR, Cartao_Acesso ICTA, Turnos ITUR, linha LN WHERE ITUR.Data >= :P_Data_I AND ITUR.Data <= :P_Data_F AND ICTR.Tarifa >= 129 AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie AND ICTA.Transacao = ICTR.Transacao AND ITUR.Cod_Turno = ICTA.Cod_Turno AND LN.cod_Linha = ITUR.LINHA group by ITUR.LINHA,ln.nome ) INTEGRACAO WHERE L_INTEG = LINHAT ORDER BY LINHAT
ou assim (com uma única instrução):
SELECT *, ((QTD_Integ / QTD_Aces) * 100) Perc FROM (SELECT ITUR.LINHA LinhaT, ln.nome DESCRICAO, sum( (case when ICTR.Produto not in (80,90) then 1 else 0 end) QTD_Aces, sum( (case when ICTR.Tarifa >= 129 then 1 else 0 end) ) QTD_Integ FROM Cartao_Transacao ICTR inner join Cartao_Acesso ICTA on (ICTA.Transacao = ICTR.Transacao and ICTA.Cod_Num_Serie = ICTR.Cod_Num_Serie) inner join Turnos ITUR on (ITUR.Cod_Turno = ICTA.Cod_Turno) inner join linha LN on (LN.cod_Linha = ITUR.LINHA) WHERE ITUR.Data >= :P_Data_I AND ITUR.Data <= :P_Data_F group by ITUR.LINHA, LN.nome ) TABELA ORDER BY LINHAT
09/10/2008
Emerson Nascimento
SELECT LinhaT, DESCRICAO, QTD_Aces, QTD_Integ, ((cast(QTD_Integ as numeric(10,3)) / cast(QTD_Aces as numeric(10,3))) * 100.000) Perc FROM (SELECT (ITUR.LINHA)LinhaT, (ln.nome) DESCRICAO, (count(*))QTD_Aces FROM Cartao_Transacao ICTR, Cartao_Acesso ICTA, Turnos ITUR, linha LN WHERE ITUR.Data >= :P_Data_I AND ITUR.Data <= :P_Data_F AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie AND ICTA.Transacao = ICTR.Transacao AND ITUR.Cod_Turno = ICTA.Cod_Turno AND ICTR.Produto not in (80,90) AND LN.cod_Linha = ITUR.LINHA group by ITUR.LINHA,LN.nome ) TOTAL, (SELECT (ITUR.LINHA)L_INTEG, (ln.nome) DESCRICAOI, (count(*))QTD_Integ FROM Cartao_Transacao ICTR, Cartao_Acesso ICTA, Turnos ITUR, linha LN WHERE ITUR.Data >= :P_Data_I AND ITUR.Data <= :P_Data_F AND ICTR.Tarifa >= 129 AND ICTR.Cod_Num_Serie = ICTA.Cod_Num_Serie AND ICTA.Transacao = ICTR.Transacao AND ITUR.Cod_Turno = ICTA.Cod_Turno AND LN.cod_Linha = ITUR.LINHA group by ITUR.LINHA,ln.nome ) INTEGRACAO WHERE L_INTEG = LINHAT ORDER BY LINHAT
09/10/2008
Eduardo-v-a
foi
´CTRL+C´ e ´CTRL+V´
voltou os valores certinhos
só acrescentei um ROUND com ,2 para arredondar os percentuais
só não consegui tirar o monte de zeros que ele deixou
mas fechou certinho
meu relatório está pronto
MUITO OBRIGADO
EMERSON
tiro certeiro como sempre
Clique aqui para fazer login e interagir na Comunidade :)