Consulta SQL - Ireport

9 respostas
abelhajr

Bom dia pessoal estou com um probleminha e não estou conseguindo resolver se puderem me ajudar.

Bom tenho um relatório no Ireport que possui a seguinte consulta SQL:

WITH Tabela AS ( SELECT dbo.f_imovel.nome AS nomeImovel, dbo.f_cartorioimovel.livro, dbo.f_cartorioimovel.folha, dbo.f_cartorioimovel.numero, dbo.f_cartorioimovel.cartorio, dbo.f_cartorioimovel.fkMunicipio, dbo.f_municipio.pkmunicipio, dbo.f_municipio.nome + '/' + dbo.f_estado.uf AS comarca, CAST(('Matricula(s) n.º ' + CAST(dbo.f_cartorioimovel.numero AS VARCHAR(100)) + ', folhas n.º ' + CAST(dbo.f_cartorioimovel.folha AS VARCHAR(100)) + ', Livro n.º ' + CAST(dbo.f_cartorioimovel.livro AS VARCHAR(1000)) + ', do ' + dbo.f_cartorioimovel.cartorio + ', da Comarca de ' + dbo.f_municipio.nome + '/' + dbo.f_estado.uf + ', ' ) AS VARCHAR(MAX)) AS Texto FROM dbo.f_cartorioimovel INNER JOIN dbo.f_licenca INNER JOIN dbo.f_processo ON dbo.f_licenca.fkprocesso = dbo.f_processo.pkProcesso INNER JOIN dbo.f_pessoaprocesso ON dbo.f_processo.pkProcesso = dbo.f_pessoaprocesso.fkProcesso INNER JOIN dbo.f_papel ON dbo.f_pessoaprocesso.fkPapel = dbo.f_papel.pkPapel INNER JOIN dbo.f_pessoa ON dbo.f_pessoaprocesso.fkPessoa = dbo.f_pessoa.pkpessoa INNER JOIN dbo.f_empreendimentoimovel ON dbo.f_processo.fkEmpreendimento = dbo.f_empreendimentoimovel.fkEmpreendimento INNER JOIN dbo.f_imovel ON dbo.f_empreendimentoimovel.fkImovel = dbo.f_imovel.pkimovel ON dbo.f_cartorioimovel.fkImovel = dbo.f_imovel.pkimovel INNER JOIN dbo.f_estado INNER JOIN dbo.f_municipio ON dbo.f_estado.pkestado = dbo.f_municipio.fkestado ON dbo.f_cartorioimovel.fkMunicipio = dbo.f_municipio.pkmunicipio WHERE (dbo.f_licenca.pkLicenca = $P{pkLicenca}) AND (dbo.f_papel.nome = 'REQUERENTE') ) SELECT TOP (1) REPLACE (REPLACE(REPLACE((SELECT Texto FROM Tabela FOR XML PATH ('')) + '', ',,', ''), '<texto>', ''), '</texto>', '') AS Texto, CAST(dbo.f_licenca.numero AS varchar) + '/' + CAST(YEAR(dbo.f_licenca.dataExpedicao) AS varchar) AS numeroLicenca, dbo.f_licenca.dataExpedicao, CONVERT(DATETIME, dbo.f_licenca.dataValidade, 103) AS dataValidade, dbo.f_licenca.observacoes, dbo.f_licenca.numeroProcesso, dbo.f_papel.nome AS papelPessoa, dbo.f_pessoa.tipo, dbo.f_pessoa.cpf, dbo.f_pessoa.nome, dbo.f_pessoa.cnpj, dbo.f_pessoa.razaosocial, dbo.f_pessoa.tipologradouro, dbo.f_pessoa.nomelogradouro, dbo.f_pessoa.numero AS numeroEndereco, dbo.f_pessoa.bairro, dbo.f_pessoa.complemento, dbo.f_pessoa.cidade AS municipioPessoa, dbo.f_imovel.nome AS nomeImovel, dbo.f_imovel.areatotal AS areaTotalGeorref, dbo.f_municipio.nome + '/' + dbo.f_estado.uf AS municipioImovel, dbo.f_cartorioimovel.livro, dbo.f_cartorioimovel.folha, dbo.f_cartorioimovel.numero, dbo.f_cartorioimovel.cartorio, dbo.f_cartorioimovel.areaTotalDocumentada FROM dbo.f_licenca INNER JOIN dbo.f_processo ON dbo.f_licenca.fkprocesso = dbo.f_processo.pkProcesso INNER JOIN dbo.f_pessoaprocesso ON dbo.f_processo.pkProcesso = dbo.f_pessoaprocesso.fkProcesso INNER JOIN dbo.f_papel ON dbo.f_pessoaprocesso.fkPapel = dbo.f_papel.pkPapel INNER JOIN dbo.f_pessoa ON dbo.f_pessoaprocesso.fkPessoa = dbo.f_pessoa.pkpessoa INNER JOIN dbo.f_empreendimentoimovel ON dbo.f_processo.fkEmpreendimento = dbo.f_empreendimentoimovel.fkEmpreendimento INNER JOIN dbo.f_imovel ON dbo.f_empreendimentoimovel.fkImovel = dbo.f_imovel.pkimovel INNER JOIN dbo.f_municipio ON dbo.f_imovel.fkmunicipio = dbo.f_municipio.pkmunicipio INNER JOIN dbo.f_estado ON dbo.f_municipio.fkestado = dbo.f_estado.pkestado INNER JOIN dbo.f_cartorioimovel ON dbo.f_imovel.pkimovel = dbo.f_cartorioimovel.fkImovel WHERE (dbo.f_licenca.pkLicenca = $P{pkLicenca}) AND (dbo.f_papel.nome = 'REQUERENTE')

até ai tudo bem, quando chamo no meu relatório o campo Texto em algum textfield ele me gera o seguinte resultado:

Matricula(s) n.º 211.662, folhas n.º 01-04, Livro n.º 02, do CARTORIO DE PROTESTOS DE AQUIDAUNA, da Comarca de AQUIDAUANA/MS,
Matricula(s) n.º 5854, folhas n.º 045, Livro n.º 984, do CARTORIO DE HIPOTECAS DA 2A CIRCUNSCRIÇÃO, da Comarca de MIRANDA/MS,
Matricula(s) n.º 34234, folhas n.º 23423, Livro n.º 234324, do CARTORIO DE HIPOTECAS DA 2A CIRCUNSCRIÇÃO, da Comarca de MIRANDA/MS,

o problema é que preciso que se um dos itens for do mesmo cartório e da mesma comarca/uf saia da seguinte forma:

Matricula(s) n.º 211.662, folhas n.º 01-04, Livro n.º 02, do CARTORIO DE PROTESTOS DE AQUIDAUNA, da Comarca de AQUIDAUANA/MS,
Matricula(s) n.º 5854, folhas n.º 045, Livro n.º 984, Matricula(s) n.º 34234, folhas n.º 23423, Livro n.º 234324,
do CARTORIO DE HIPOTECAS DA 2A CIRCUNSCRIÇÃO, da Comarca de MIRANDA/MS,

não repetindo assim a comarca/uf novamente.

Obrigado pela atenção!

9 Respostas

J

Crie um agrupamento pelo campo que vc queira que não repita!!!

abelhajr

como faria isso, estou meio perdido!

J

No próprio Ireport(da uma procurada por agrupamentos no menu, não sei qual versão do Ireport vc esta, mais é facil de achar)… vc cria um grupo pelo nome(s) das colunas na tabela que vc queira q não repita… depois vc ajeita ai de acordo com a sua necessidade(muda os campos p/ banda do grupo criado) e vai executando p/ ver como esta!

abelhajr

e que na verdade não estou usando colunas , esse relatório e como se fosse uma mala-direta e um documento ou seja isso esta no meio de um texto ai precisaria fazer na consulta sql mesmo este tratamento.

abelhajr

alguém sabe como posso resolver este problema pela consulta?

ManoJava

Boa tarde!

Da pra fazer isso no próprio ireport, vai no Report Inspector e clica em cima do nome do seu relatório, botão direito do mouse e seleciona “Add Report Group”,
na próxima janela que se abrir determine qual campo irá definir seu grupo no seu caso “dbo.f_estado.uf” e veja qual o resultado.

Att.

abelhajr

Bom primeiramente obrigado por ajudar, mais essa função não funciona no meu caso, como comentei com o amigo acima este relatório e como um documento extenso e esse texto todo juntamente com outras informações, estão dentro de somente um textfield por isso preciso de algo na consulta sql para que evite a repetição e deixe como coloquei na descrição do problema. a não ser que pelo ireport eu consiga fazer isso dentro de um só textfield.

abelhajr

alguém tem alguma ideia de como poderia fazer isso pela consulta?

Y

fiz de cabeça, não sei se funciona

cria uma procedure e usa essa procedure no IREPORT

CREATE PROCEDURE SP_RelatorioM
@pkLicenca AS INT
AS
SELECT dbo.f_imovel.nome AS nomeImovel, dbo.f_cartorioimovel.livro, dbo.f_cartorioimovel.folha, dbo.f_cartorioimovel.numero, dbo.f_cartorioimovel.cartorio, dbo.f_cartorioimovel.fkMunicipio, dbo.f_municipio.pkmunicipio, dbo.f_municipio.nome + '/' + dbo.f_estado.uf AS comarca,
CAST(('Matricula(s) n.º ' + CAST(dbo.f_cartorioimovel.numero AS VARCHAR(100)) + ', folhas n.º ' + CAST(dbo.f_cartorioimovel.folha AS VARCHAR(100)) + ', Livro n.º ' + CAST(dbo.f_cartorioimovel.livro AS VARCHAR(1000)) + ', do ' + dbo.f_cartorioimovel.cartorio + ', ' ) AS VARCHAR(MAX)) AS Texto --  + ', da Comarca de ' + dbo.f_municipio.nome + '/' + dbo.f_estado.uf
INTO #_temp
FROM dbo.f_cartorioimovel
INNER JOIN dbo.f_licenca
INNER JOIN dbo.f_processo ON dbo.f_licenca.fkprocesso = dbo.f_processo.pkProcesso
INNER JOIN dbo.f_pessoaprocesso ON dbo.f_processo.pkProcesso = dbo.f_pessoaprocesso.fkProcesso
INNER JOIN dbo.f_papel ON dbo.f_pessoaprocesso.fkPapel = dbo.f_papel.pkPapel
INNER JOIN dbo.f_pessoa ON dbo.f_pessoaprocesso.fkPessoa = dbo.f_pessoa.pkpessoa
INNER JOIN dbo.f_empreendimentoimovel ON dbo.f_processo.fkEmpreendimento = dbo.f_empreendimentoimovel.fkEmpreendimento
INNER JOIN dbo.f_imovel ON dbo.f_empreendimentoimovel.fkImovel = dbo.f_imovel.pkimovel ON dbo.f_cartorioimovel.fkImovel = dbo.f_imovel.pkimovel
INNER JOIN dbo.f_estado
INNER JOIN dbo.f_municipio ON dbo.f_estado.pkestado = dbo.f_municipio.fkestado ON dbo.f_cartorioimovel.fkMunicipio = dbo.f_municipio.pkmunicipio
WHERE (dbo.f_licenca.pkLicenca = @pkLicenca) AND (dbo.f_papel.nome = 'REQUERENTE')

;WITH Tabela AS (
	SELECT REPLACE(REPLACE(REPLACE((SELECT Texto FROM #_temp FOR XML PATH ('')) + '', ',,', ''), '<texto>', ''), '</texto>', '') AS Texto, CAST(dbo.f_licenca.numero AS varchar) + '/' + CAST(YEAR(dbo.f_licenca.dataExpedicao) AS varchar) AS numeroLicenca, dbo.f_licenca.dataExpedicao,
						  CONVERT(DATETIME, dbo.f_licenca.dataValidade, 103) AS dataValidade, dbo.f_licenca.observacoes, dbo.f_licenca.numeroProcesso,
						  dbo.f_papel.nome AS papelPessoa, dbo.f_pessoa.tipo, dbo.f_pessoa.cpf, dbo.f_pessoa.nome, dbo.f_pessoa.cnpj, dbo.f_pessoa.razaosocial,
						  dbo.f_pessoa.tipologradouro, dbo.f_pessoa.nomelogradouro, dbo.f_pessoa.numero AS numeroEndereco, dbo.f_pessoa.bairro, dbo.f_pessoa.complemento,
						  dbo.f_pessoa.cidade AS municipioPessoa, dbo.f_imovel.nome AS nomeImovel, dbo.f_imovel.areatotal AS areaTotalGeorref,
						  dbo.f_municipio.nome + '/' + dbo.f_estado.uf AS municipioImovel, dbo.f_cartorioimovel.livro, dbo.f_cartorioimovel.folha, dbo.f_cartorioimovel.numero,
						  dbo.f_cartorioimovel.cartorio, dbo.f_cartorioimovel.areaTotalDocumentada
	FROM         dbo.f_licenca INNER JOIN
						  dbo.f_processo ON dbo.f_licenca.fkprocesso = dbo.f_processo.pkProcesso INNER JOIN
						  dbo.f_pessoaprocesso ON dbo.f_processo.pkProcesso = dbo.f_pessoaprocesso.fkProcesso INNER JOIN
						  dbo.f_papel ON dbo.f_pessoaprocesso.fkPapel = dbo.f_papel.pkPapel INNER JOIN
						  dbo.f_pessoa ON dbo.f_pessoaprocesso.fkPessoa = dbo.f_pessoa.pkpessoa INNER JOIN
						  dbo.f_empreendimentoimovel ON dbo.f_processo.fkEmpreendimento = dbo.f_empreendimentoimovel.fkEmpreendimento INNER JOIN
						  dbo.f_imovel ON dbo.f_empreendimentoimovel.fkImovel = dbo.f_imovel.pkimovel INNER JOIN
						  dbo.f_municipio ON dbo.f_imovel.fkmunicipio = dbo.f_municipio.pkmunicipio INNER JOIN
						  dbo.f_estado ON dbo.f_municipio.fkestado = dbo.f_estado.pkestado INNER JOIN
						  dbo.f_cartorioimovel ON dbo.f_imovel.pkimovel = dbo.f_cartorioimovel.fkImovel
	WHERE  (dbo.f_licenca.pkLicenca = @pkLicenca) AND (dbo.f_papel.nome = 'REQUERENTE')
)
SELECT TOP 1 
REPLACE(REPLACE(REPLACE((SELECT Texto FROM Tabela FOR XML PATH ('')) + '', ',,', ''), '<texto>', ''), '</texto>', '') AS Texto
, dataValidade, observacoes, numeroProcesso,
papelPessoa, tipo, cpf, nome, cnpj, razaosocial, tipologradouro, nomelogradouro, numeroEndereco, bairro, complemento,
municipioPessoa, nomeImovel, areaTotalGeorref,
municipioImovel, livro, folha, numero, cartorio, areaTotalDocumentada
FROM Tabela
GROUP BY 
dataValidade, observacoes, numeroProcesso,
papelPessoa, tipo, cpf, nome, cnpj, razaosocial, tipologradouro, nomelogradouro, numeroEndereco, bairro, complemento,
municipioPessoa, nomeImovel, areaTotalGeorref,
municipioImovel, livro, folha, numero, cartorio, areaTotalDocumentada

DROP TABLE #_temp

acho que para chamar no ireport usa SP_RelatorioM $P{pkLicenca}

Criado 19 de outubro de 2011
Ultima resposta 24 de out. de 2011
Respostas 9
Participantes 4