GARANTIR DESCONTO

Fórum Select dentro outro Select??? #181809

12/09/2003

0

Tenho uma tabela Contacorrente em Ib6;
preciso fazer um select mas ou meno assim:

Select SUM(contacorrente.cc_debito) as sldoMat
from Contacorrente
where contacorrente.cc_nome=´material consumo´

até ai tudo bem, só que o CC_Nome tem varias descrição que preciso tipo:´Material consumo´, ´Diarias´ entre outras.

e preciso criar esse campo SUM com nome diferente para cada Select
Ex. SldoMat o outro SldoDiaris etc..

É possivel fazer um select dentro do outro na mesma tabela que me retorne vários campos SUM(diferentes)?
pode me passar um exemplo?


grato!


Anselmo

Anselmo

Responder

Posts

12/09/2003

Jairroberto

Olá, Anselmo!

Você poderia fazer um UNION SELECT, mas nesse caso acho muito mais fácil usar o GROUP BY, que retornará um registro com o somatório do ´cc_debito´ para cada ´cc_nome´. Veja um exemplo:

SELECT contacorrente.cc_nome, SUM(contacorrente.cc_debito) as Saldo
FROM ContaCorrente
GROUP BY contacorrente.cc_nome




Um abraço,
Jair


Responder

Gostei + 0

12/09/2003

Jairroberto

Ola Jair Roberto! bom agradeço sua colaboração, mas na verdade o que eu preciso nuam resolveria assim. preciso de atributos saldo com nomes difirentes: Ex:Saldomat, saldodiarias, saldoserviços etc. e nesse caso o atributo é saldo com varias linhas. tentei tambem com UNION mas dá na mesma me retorna um atributo só com varias linhas. Será que é possivel fazer algo que me retorna varios atributos? grato! Eurides


Olá, Eurides!

Como você está usando IB6, é possível criar uma ´Select Stored Procedure´ (Stored Procedure Selecionável). O Interbase/Firebird é o único SGDB que eu conheço com esta capacidade. A edição 39 da revista Clube Delphi tem uma matéria excelente do Cantu sobre a criação de Stored Procedures e Triggers no IB/FB. Vou tentar fazer um exemplo:

CREATE PROCEDURE SP_TESTE
RETURNS (
  SALDO_MATERIAIS NUMERIC(9,2),
  SALDO_DIARIAS NUMERIC(9,2),
  SALDO_OUTRAS NUMERIC(9,2))
AS
BEGIN
  
  /* Calcula o Saldo de Materiais e joga o valor na variável de retorno */
  SELECT SUM(cc_debito)
  FROM ContaCorrente
  WHERE cc_nome=´material consumo´
  INTO :SALDO_MATERIAIS;

  /* Calcula o Saldo de Diárias e joga o valor na variável de retorno */
  SELECT SUM(cc_debito)
  FROM ContaCorrente
  WHERE cc_nome=´diarias´
  INTO :SALDO_DIARIAS;

  /* Calcula o Saldo de Outras e joga o valor na variável de retorno */
  SELECT SUM(cc_debito)
  FROM ContaCorrente
  WHERE (cc_nome<>´material consumo´) AND (cc_nome<>´diarias´)
  INTO :SALDO_OUTRAS;

  SUSPEND;

END
^



Para chamar a Stored Procedure é só usar a seguinte cláusula SQL:
SELECT * FROM SP_TESTE


Um abraço,
Jair


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar