Select com campo quot;calculadoquot;
Pessoal, meu caso é o seguinte:
Tenho um cadastro de apartamentos e outro cadastro das garagens. Um apartamento pode ter quantas garagens quiser e, eu preciso de uma listagem, que me informe em apenas uma linha, o número de todas as vagas.
Então preciso que meu relatório fique assim:
Alguma luz sobre como montar essa select ????
Tenho um cadastro de apartamentos e outro cadastro das garagens. Um apartamento pode ter quantas garagens quiser e, eu preciso de uma listagem, que me informe em apenas uma linha, o número de todas as vagas.
[b:2a3b9852ec]TABELA APARTAMENTO[/b:2a3b9852ec]
-----------------------------
CODAPT - I
NUMAPT - Var(20)
[b:2a3b9852ec]TABELA GARAGEM[/b:2a3b9852ec]
-----------------------------
CODGAR - I
CODAPT - I
NUMVAG - I
Então preciso que meu relatório fique assim:
[b:2a3b9852ec]APT 101 - [/b:2a3b9852ec] Vaga 15, 32, 47
[b:2a3b9852ec]APT 102 - [/b:2a3b9852ec] Vaga 14
[b:2a3b9852ec]APT 103 - [/b:2a3b9852ec] Vaga 16, 18
Alguma luz sobre como montar essa select ????
Powerlog Tecnologia
Curtidas 0
Respostas
Dbergkamps10
07/05/2008
Olá,
Tente assim:
Espero ter ajudado.
Att
Dalton
Tente assim:
select * from vagas where vagas.apto = Apto group by Apto
Espero ter ajudado.
Att
Dalton
GOSTEI 0
Powerlog Tecnologia
07/05/2008
Colega dbergkamps10 ,
desse jeito eu teria que fazer 1 select para cada linha do meu relatório de apartamentos... fica inviável; seria uma resolução ´na mão´
Ainda continuo no aguardo !!!
Valeu ...
desse jeito eu teria que fazer 1 select para cada linha do meu relatório de apartamentos... fica inviável; seria uma resolução ´na mão´
Ainda continuo no aguardo !!!
Valeu ...
GOSTEI 0
Webjoel
07/05/2008
Olá!
Se as tabelas estiverem relacionadas com o CODAPT, você pode fazer um inner join, ex:
Só que ele não mostrará como você precisa, isso você só pode fazer na impressão/visualização deste relatório, vocÇe pode fazer um gbfirst para mostrar desse modo que você quer!
Qualquer duvida post.
Se as tabelas estiverem relacionadas com o CODAPT, você pode fazer um inner join, ex:
SELECT A.CODAPT, G.NUMVAG FROM GARAGEM INNER JOIN APARTAMENTO A ON (A.CODAPT = G.CODAPT);
Só que ele não mostrará como você precisa, isso você só pode fazer na impressão/visualização deste relatório, vocÇe pode fazer um gbfirst para mostrar desse modo que você quer!
Qualquer duvida post.
GOSTEI 0
Mazzi
07/05/2008
Ola amigo, mas o que vc esta usando entao para fazer a impressao?
Pois q SQL do amigo (up) agrupando por Apto, teria q dar certo em qq Layout de Impressao do tipo QuickReport (coloando os dataSources) e FortesReport , ambos usando agrupamentos.
No Rave tbm.
Qual ferramenta de relatorio vc esta usando?
Pois um SQL , advindo de um componente Dataset, vc nao precisaria informar um pra cada linha nao....
Pois q SQL do amigo (up) agrupando por Apto, teria q dar certo em qq Layout de Impressao do tipo QuickReport (coloando os dataSources) e FortesReport , ambos usando agrupamentos.
No Rave tbm.
Qual ferramenta de relatorio vc esta usando?
Pois um SQL , advindo de um componente Dataset, vc nao precisaria informar um pra cada linha nao....
GOSTEI 0
Powerlog Tecnologia
07/05/2008
Estou usando o Report Builder.
Mas dessa forma o relatório ficaria assim:
Não quero que fique uma vaga por linha e sim todas as vagas na linha do apartamento ...
Mas dessa forma o relatório ficaria assim:
[b:c65ed2b503]Atp 101[/b:c65ed2b503]
Vaga 01
Vaga 02
Vaga 03
[b:c65ed2b503]Apt 102[/b:c65ed2b503]
Vaga 04
etc...
Não quero que fique uma vaga por linha e sim todas as vagas na linha do apartamento ...
GOSTEI 0
Webjoel
07/05/2008
Pois é,
neste caso tem cuidar disso na hora da impressao, usando o gbFirst, onde atraves de indices e quebras no ClientDataSet você controla os registros de forma que, o indice será o apartamento, entao no laço do ClientDataSet ele confere qual apartamento, se é o mesmo, ele concatena numa variavel e pois mostra, é a única forma que vejo para fazer numa mesma linha.
Dé uma olhada na net sobre o gbFirst na net, é um pouco complicado para se explicar aqui no fórum.
neste caso tem cuidar disso na hora da impressao, usando o gbFirst, onde atraves de indices e quebras no ClientDataSet você controla os registros de forma que, o indice será o apartamento, entao no laço do ClientDataSet ele confere qual apartamento, se é o mesmo, ele concatena numa variavel e pois mostra, é a única forma que vejo para fazer numa mesma linha.
Dé uma olhada na net sobre o gbFirst na net, é um pouco complicado para se explicar aqui no fórum.
GOSTEI 0
Catunda
07/05/2008
Experimente criar uma StoredProcedure como abaixo:
CREATE PROCEDURE RELAT_VAGAS
RETURNS (
XVAGAS VARCHAR(100),
XAPT INTEGER,
XNAPT VARCHAR(20))
AS
DECLARE VARIABLE Y INTEGER;
begin
for select codapt,numapt from apartamento into :xapt,:xnapt do
begin
xvagas=´vagas: ´;
for select numvaga from garagem where codapt=:xapt into :y do
begin
xvagas=(:xvagas||:y||´, ´);
end
suspend;
end
suspend;
end
CREATE PROCEDURE RELAT_VAGAS
RETURNS (
XVAGAS VARCHAR(100),
XAPT INTEGER,
XNAPT VARCHAR(20))
AS
DECLARE VARIABLE Y INTEGER;
begin
for select codapt,numapt from apartamento into :xapt,:xnapt do
begin
xvagas=´vagas: ´;
for select numvaga from garagem where codapt=:xapt into :y do
begin
xvagas=(:xvagas||:y||´, ´);
end
suspend;
end
suspend;
end
GOSTEI 0
Powerlog Tecnologia
07/05/2008
Já tinha pensado em fazer stored_procedure mas não tinha o caminho !!! Valeu a dica, vou implementar e assim que tiver uma resposta coloco aqui como ficou ...
VALEU !!!!!!!!!!!
VALEU !!!!!!!!!!!
GOSTEI 0
Powerlog Tecnologia
07/05/2008
SOLUÇÃO:
create or alter procedure SAREL_LISTABOXE_UNID ( PCODEMP integer, PORDEM varchar(100)) returns ( CODBOX integer, CODUNI integer, NUMUNI varchar(20), CODBLOXUNI integer, DESEBLUNI varchar(20), DESEPVUNI varchar(20), ORDENAUNI integer, CODEMPX integer, DESEMP varchar(100), NUMBOX varchar(500), CON_CODIGO integer, CON_NOMRAZ varchar(100), QTDCON integer, DATAATUAL date) AS declare variable SQLTEXT varchar(8192); declare variable xCODBOX INTEGER; declare variable xCODUNI INTEGER; declare variable xNUMUNI VARCHAR(20); declare variable xCODBLOXUNI INTEGER; declare variable xDESEBLUNI VARCHAR(20); declare variable xDESEPVUNI VARCHAR(20); declare variable xORDENAUNI INTEGER; declare variable xCODEMPX INTEGER; declare variable xDESEMP VARCHAR(100); declare variable xNUMBOX VARCHAR(20); declare variable xCON_CODIGO INTEGER; declare variable xCON_NOMRAZ VARCHAR(100); declare variable xQTDCON INTEGER; declare variable xcoduniant integer; begin xcoduniant = 0; CODBOX = 0; CODUNI = 0; NUMUNI = ''; CODBLOXUNI = 0; DESEBLUNI = ''; DESEPVUNI = ''; ORDENAUNI = 0; CODEMPX = 0; DESEMP = ''; NUMBOX = ''; con_codigo = 0; con_nomraz = ''; qtdcon = 0; SQLTEXT = ' select b.codbox, b.coduni, u.numuni, u.codblox as codbloxuni, ebu.desebl as desebluni, epu.desepv as desepvuni, epu.ordena as ordenauni, b.codempx, e.desemp, b.numbox, c.con_codigo, c.con_nomraz, b.qtdcon from emprboxe b inner join empreend e on e.codemp = b.codempx left join emprunid u on u.coduni = b.coduni left join emprbloc ebu on ebu.codebl = u.codblox left join emprpavi epu on epu.codepv = u.codepv left join contatos c on c.con_codigo = b.codco1 where 1 = 1 and b.coduni > 0'; IF ((:pcodemp IS NOT NULL) AND (:pcodemp > 0)) THEN sqltext = sqltext || ' and b.codempx = '|| :pcodemp; sqltext = sqltext || ' order by b.codempx, ebu.codebl, epu.ordena, u.numuni, b.codblox, b.numbox'; FOR EXECUTE STATEMENT sqltext INTO xCODBOX, xCODUNI, xNUMUNI, xCODBLOXUNI, xDESEBLUNI, xDESEPVUNI, xORDENAUNI, xCODEMPX, xDESEMP, xNUMBOX, xcon_codigo, xcon_nomraz, xqtdcon DO BEGIN if (xcoduniant = 0) then xcoduniant = xcoduni; if (xcoduni <> xcoduniant) then begin SUSPEND; CODBOX = 0; CODUNI = 0; NUMUNI = ''; CODBLOXUNI = 0; DESEBLUNI = ''; DESEPVUNI = ''; ORDENAUNI = 0; CODEMPX = 0; DESEMP = ''; NUMBOX = ''; con_codigo = 0; con_nomraz = ''; qtdcon = 0; end if (xqtdcon is null) then xqtdcon = 0; CODBOX = xCODBOX; CODUNI = xCODUNI; NUMUNI = xNUMUNI; CODBLOXUNI = xCODBLOXUNI; DESEBLUNI = xDESEBLUNI; DESEPVUNI = xDESEPVUNI; ORDENAUNI = xORDENAUNI; CODEMPX = xCODEMPX; DESEMP = xDESEMP; if (NUMBOX = '') then NUMBOX = xNUMBOX; else NUMBOX = NUMBOX||', '||xNUMBOX; CON_CODIGO = xCON_CODIGO; CON_NOMRAZ = xCON_NOMRAZ; QTDCON = QTDCON+xQTDCON; DATAATUAL = current_date; xcoduniant = xcoduni; END end
GOSTEI 0