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 é responsável por seu conteúdo e
endereçamento. Cabe ao destinatário cuidar quanto ao tratamento
adequado. Sem a devida autorização, a divulgação, a
reprodução, a distribuição ou qualquer outra
ação em desconformidade com as normas internas da ELETRONORTE S/A
são proibidas e passíveis de sanção disciplinar,
cí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