Array
(
)

Criando coluna com valor ¬ de outras colunas...COMO?

Eduardo-v-a
   - 08 out 2008

olá amigos...
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á

Emerson
   - 08 out 2008

tente assim:#CódigoSELECT
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):#CódigoSELECT
*,
((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


Emerson
   - 09 out 2008

#CódigoSELECT
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


Eduardo-v-a
   - 09 out 2008

cara ele rodou certinho aqui
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