Olá comunidade, vamos vê se consigo demonstrar o que estou querendo:
 
Tenho um select com a seguinte estrutura:
 
SELECT campo1 AS "X", campo2 AS "Y", campo3 AS "Z", (campo3/campo2)*100 AS "W"  
FROM TABELA1, TABELA2 where pk_tabela1 = fk_tabela2.
 
O campo3 é obtido através de um sub-select. Este eu apresento abaixo 
(novamente):
(SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE 
X.BH_CHAVE=Y.BH_CHAVE AND 
Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS 
NULL))  
 
Observem que para exibir o campo de apelido "W", eu preciso fazer uma conta com 
os campos *campo2* (um campo normal de uma das tabelas envolvidas) 
e *campo3* (obtido através de um sub-select).
 
O problema é que não sei como reutilizar o resultado de campo3 para calcular o 
valor do campo "W". 
Para rodar a consulta estou tendo que calcular o sub-select acima duas vezes. 
Quando eu programava com SQL Server eu fazia isso normalmente, porém não estou 
sabendo fazer isso com o postgres. 
Queria que o SQL fosse como está abaixo:
 
 
SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, 
(SELECT MAX(Y.VALOR) FROM PAS_R X,b hpas_h_2009_05_01 Y WHERE 
X.BH_CHAVE=Y.BH_CHAVE AND 
Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS 
NULL))  AS apelido_maximo, 
(apelido_maximo/B.nominal)*100 AS Percent, CAST('2009_05_01' as DATE) as Data
FROM "EQUIPAMENTOS" AS A, "IDS_EQUIPAMENTOS" AS B, "RELATORIOS_EQUIPAMENTOS" AS 
C WHERE A.eq = B.eq 
AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC;
 
Mas atualmente estou fazendo assim (executando o mesmo sub-select duas vezes):
 
SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, 
(SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE 
X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = 
B.id_eq AND bh_dthr_fim IS NULL))  AS maximo, 
(SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE 
X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = 
B.id_eq AND bh_dthr_fim IS NULL))/B.nominal)*100 AS  Percent, 
CAST('2009_05_01' as DATE) as Data
FROM "EQUIPAMENTOS" AS A, "IDS_EQUIPAMENTOS" AS B, "RELATORIOS_EQUIPAMENTOS" AS 
C WHERE A.eq = B.eq 
AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC;
 
 
Desde já agradeço a atenção e fico no aguardo.
 
PS: 
O campo Maximo representa o valor Maximo de tensão que um determinado 
equipamento apresentou em um mês 
e o nominal o valor máximo (ou limite) que esse equipamento pode suportar em 
falhar.
O Maximo dividido pelo percentual representa o carregamento percentual desse 
equipamento no mês.

Newton Teixeira do Nascimento JuniorAnalista de Sistemas - CMAO
e-mail: [email protected]

 



<html>
<body>
<font face = "arial" size = "1" color = "#000080">Aviso:<br>"O emitente desta 
mensagem &eacute; respons&aacute;vel por seu conte&uacute;do e 
endere&ccedil;amento. Cabe ao destinat&aacute;rio cuidar quanto ao tratamento 
adequado. Sem a devida autoriza&ccedil;&atilde;o, a divulga&ccedil;&atilde;o, a 
reprodu&ccedil;&atilde;o, a distribui&ccedil;&atilde;o ou qualquer outra 
a&ccedil;&atilde;o em desconformidade com as normas internas da ELETRONORTE S/A 
s&atilde;o proibidas e pass&iacute;veis de san&ccedil;&atilde;o disciplinar, 
c&iacute;vel e criminal. Esta mensagem pode ser monitorada".
</font>
</body>
</html>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a