Como fazer isso em SQL ?

Delphi

27/05/2003

Caros amigos,

Tenho a seguinte estrutura:

Tabela Lançamentos
Codigo, CodDiscrimina, Data, Janeiro, Fevereiro, Marco, Abril, Maio Junho, Julho

Tabela Discrimina
CodDiscrimina, Descrição

O que estou querendo é fazer uma estrução SQL que possa obter o seguinte relatório conforme abaixo das tabela acima apresendatas.

--------------------------------------------------------------------------------------Descrição Janeiro Fevereiro Marco Abril Maio Junho Julho TOTAL
Boleto 40 40 0 30 40 0 0 150
Cartão 50 30 0 10 30 0 0 120
Tele-Fax 70 10 0 59 30 0 0 169
Telefones 80 50 0 30 10 0 0 170
Xerox 30 40 30 10 20 0 0 130

TOTAL 270 170 30 139 139 0 0

--------------------------------------------------------------------------------------

Estou usando Delphi 7 com Interbase 6.0 e componentes IBX

Mantmor


Mantmor

Mantmor

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

27/05/2003

Caros amigos, Tenho a seguinte estrutura: Tabela Lançamentos Codigo, CodDiscrimina, Data, Janeiro, Fevereiro, Marco, Abril, Maio Junho, Julho Tabela Discrimina CodDiscrimina, Descrição O que estou querendo é fazer uma estrução SQL que possa obter o seguinte relatório conforme abaixo das tabela acima apresendatas. --------------------------------------------------------------------------------------Descrição Janeiro Fevereiro Marco Abril Maio Junho Julho TOTAL Boleto 40 40 0 30 40 0 0 150 Cartão 50 30 0 10 30 0 0 120 Tele-Fax 70 10 0 59 30 0 0 169 Telefones 80 50 0 30 10 0 0 170 Xerox 30 40 30 10 20 0 0 130 TOTAL 270 170 30 139 139 0 0 -------------------------------------------------------------------------------------- Estou usando Delphi 7 com Interbase 6.0 e componentes IBX Mantmor


SELECT DIS.DESCRICAO, LAN.JANEIRO, LAN.FEVEREIRO, LAN.MARCO, LAN.ABRIL, LAN.MAIO, LAN.JUNHO, LAN.JULHO, 
(LAN.JANEIRO + LAN.FEVEREIRO + LAN.MARCO + LAN.ABRIL + LAN.MAIO + LAN.JUNHO + LAN.JULHO) AS TOTAL
FROM LANCAMENTOS LAN
INNER JOIN DISCRIMINA DIS
ON (LAN.CODDISCRIMINA = DIS.CODDISCRIMINA)
UNION
SELECT ´TOTAL GERAL ´, SUM(LAN.JANEIRO), SUM(LAN.FEVEREIRO), SUM(LAN.MARCO), SUM(LAN.ABRIL), SUM(LAN.MAIO), SUM(LAN.JUNHO), SUM(LAN.JULHO), 
(SUM(LAN.JANEIRO) + SUM(LAN.FEVEREIRO) + SUM(LAN.MARCO) + SUM(LAN.ABRIL) + SUM(LAN.MAIO) + SUM(LAN.JUNHO) + SUM(LAN.JULHO)) AS TOTAL
FROM LANCAMENTOS LAN
INNER JOIN DISCRIMINA DIS
ON (LAN.CODDISCRIMINA = DIS.CODDISCRIMINA)


No segundo select da instrução acima a expressão ´TOTAL GERAL´ deve ter o mesmo comprimento do campo DIS.DESCRICAO


GOSTEI 0
Torres Delphi

Torres Delphi

27/05/2003

Nao entendi o motivo da sua tabela contem apenas alguns meses. Ela seria ´elastica´?

Acho que facilitaria muito colocar uma data em cada lancamento ao inves de ir colocando mes a mes.

Para saber qual foi, usaria uma funcao que retornaria o mes da data de lancamento. O comando SQL demonstrato resolve seu problema, mas acho que suas tabelas deveria ser normalizadas novamente de modo que fique mais objetiva.

Abracos


GOSTEI 0
POSTAR