GARANTIR DESCONTO

Fórum Registros Duplicados no Resultado do Select #409050

03/11/2011

0

Galera eu estou fazendo um select e meus registros estão duplando mesmo eu colocando o DISTINCT, eu utilizo o firebird 2.5.

Eu tenho a seguite view
CREATE OR ALTER VIEW VW_CLIENTES(
    CLI_ID,
    CLI_NOME,
    CLI_ENDERECO,
    CLI_NUMERO,
    CLI_BAIRRO,
    CLI_CIDADE,
    CLI_CEP,
    CLI_UF,
    CLI_FONE1,
    CLI_FONE2,
    CLI_FONE3,
    CLI_FAX,
    CLI_RG,
    CLI_CPF_CNPJ,
    CLI_MAIL,
    CLI_SITE,
    CLI_LIMITE,
    CLI_SALDO,
    CLI_TIPO,
    CLI_TABELA,
    STATUS,
    CLI_FOTO,
    CLI_OBS,
    DATA_CAD,
    DATA_ALT,
    CLI_NASCIMENTO,
    CLI_CREDITOCONSUMO,
    CLI_CREDITOTIPO,
    CLI_RAZAO,
    CLI_VALIDADECARTAO,
    CLI_COMPLEMENTO,
    CLI_CONTATO,
    CLI_CATEGORIA,
    CLI_CLASSE,
    CLI_LOGIN,
    CLI_SENHA,
    CLI_VENDAS,
    CLI_SUFRAMA,
    USU_ID,
    USU_LOGIN,
    LOJ_ID,
    DATA_BLOQUEIO,
    MOTIVO_BLOQUEIO,
    DATA_DESBLOQUEIO,
    MOTIVO_DESBLOQUEIO,
    ROT_ID,
    ROT_DESCRICAO,
    ARE_DESCRICAO,
    SET_DESCRICAO,
    CLI_INTINERARIO,
    ISENTO_ICMS)
AS
select distinct
    clientes.cli_id,
    clientes.cli_nome,
    clientes.cli_endereco,
    clientes.cli_numero,
    clientes.cli_bairro,
    clientes.cli_cidade,
    clientes.cli_cep,
    clientes.cli_uf,
    clientes.cli_fone1,
    clientes.cli_fone2,
    clientes.cli_fone3,
    clientes.cli_fax,
    clientes.cli_rg,
    clientes.cli_cpf_cnpj,
    clientes.cli_mail,
    clientes.cli_site,
    clientes.cli_limite,
    clientes.cli_saldo,
    clientes.cli_tipo,
    clientes.cli_tabela,
    case clientes.status
      when 0 then ATIVO
      when 1 then INATIVO
      when 2 then BLOQUEADO
    end as STATUS,
    clientes.cli_foto,
    clientes.cli_obs,
    clientes.data_cad,
    clientes.data_alt,
    clientes.cli_nascimento,
    clientes.cli_creditoconsumo,
    clientes.cli_creditotipo,
    clientes.cli_razao,
    clientes.cli_validadecartao,
    clientes.cli_complemento,
    clientes.cli_contato,
    clientes.cli_categoria,
    clientes.cli_classe,
    clientes.cli_login,
    clientes.cli_senha,
    clientes.cli_vendas,
    clientes.cli_suframa,
    clientes.usu_id,
    usuarios.usu_login,
    clientes.loj_id,
    clientes.data_bloqueio,
    clientes.motivo_bloqueio,
    clientes.data_desbloqueio,
    clientes.motivo_desbloqueio,
    clientes.rot_id,
    rotas.rot_descricao,
    areas.are_descricao,
    setores.set_descricao,
    clientes.cli_intinerario,
    clientes.isento_icms
from setores
inner join rotas
on (rotas.rot_id = setores.rota1)
or (rotas.rot_id = setores.rota2)
or (rotas.rot_id = setores.rota3)
or (rotas.rot_id = setores.rota4)
or (rotas.rot_id = setores.rota5)
or (rotas.rot_id = setores.rota6)
or (rotas.rot_id = setores.rota7)
inner join areas on areas.are_id = setores.are_id
inner join clientes on clientes.rot_id = rotas.rot_id
left join usuarios on usuarios.usu_id = clientes.usu_id

;


E em cima desta viu eu criei uma Store Procedure para fazer um consulta em vários campos da view.

CREATE OR ALTER PROCEDURE SP_CLIENTES_CONSULTA (
    cliente varchar(50))
returns (
    cli_id integer,
    cli_nome varchar(50),
    cli_endereco varchar(70),
    cli_numero varchar(5),
    cli_bairro varchar(50),
    cli_cidade varchar(50),
    cli_cep varchar(10),
    cli_uf varchar(2),
    cli_fone1 varchar(50),
    cli_fone2 varchar(50),
    cli_fone3 varchar(50),
    cli_fax varchar(50),
    cli_rg varchar(20),
    cli_cpf_cnpj varchar(21),
    cli_mail varchar(100),
    cli_site varchar(100),
    cli_limite numeric(18,2),
    cli_saldo numeric(18,2),
    cli_tipo integer,
    cli_tabela integer,
    status char(9),
    cli_foto blob sub_type 0 segment size 80,
    cli_obs blob sub_type 0 segment size 80,
    data_cad timestamp,
    data_alt timestamp,
    cli_nascimento date,
    cli_creditoconsumo numeric(18,2),
    cli_creditotipo integer,
    cli_razao varchar(50),
    cli_validadecartao date,
    cli_complemento varchar(20),
    cli_contato varchar(50),
    cli_categoria varchar(50),
    cli_classe varchar(50),
    cli_login varchar(100),
    cli_senha varchar(50),
    cli_vendas numeric(18,2),
    cli_suframa varchar(30),
    usu_id integer,
    usu_login varchar(20),
    loj_id integer,
    data_bloqueio timestamp,
    motivo_bloqueio blob sub_type 0 segment size 80,
    data_desbloqueio timestamp,
    motivo_desbloqueio blob sub_type 0 segment size 80,
    rot_id integer,
    rot_descricao varchar(30),
    are_descricao varchar(50),
    set_descricao varchar(50),
    cli_intinerario integer,
    isento_icms integer)
as
BEGIN
  FOR /* CONSULTA PELA RAZAO SOCIAL */
    select
         cli_id,
         cli_nome,
         cli_endereco,
         cli_numero,
         cli_bairro,
         cli_cidade,
         cli_cep,
         cli_uf,
         cli_fone1,
         cli_fone2,
         cli_fone3,
         cli_fax,
         cli_rg,
         cli_cpf_cnpj,
         cli_mail,
         cli_site,
         cli_limite,
         cli_saldo,
         cli_tipo,
         cli_tabela,
         status,
         cli_foto,
         cli_obs,
         data_cad,
         data_alt,
         cli_nascimento,
         cli_creditoconsumo,
         cli_creditotipo,
         cli_razao,
         cli_validadecartao,
         cli_complemento,
         cli_contato,
         cli_categoria,
         cli_classe,
         cli_login,
         cli_senha,
         cli_vendas,
         cli_suframa,
         usu_id,
         usu_login,
         loj_id,
         data_bloqueio,
         motivo_bloqueio,
         data_desbloqueio,
         motivo_desbloqueio,
         rot_id,
         rot_descricao,
         are_descricao,
         set_descricao,
         cli_intinerario,
         isento_icms
    from
        vw_clientes
    where
        cli_razao LIKE  % || :CLIENTE || %

    UNION ALL

     /* CONSULTA PELO NOME FANTASIA */
    select
         cli_id,
         cli_nome,
         cli_endereco,
         cli_numero,
         cli_bairro,
         cli_cidade,
         cli_cep,
         cli_uf,
         cli_fone1,
         cli_fone2,
         cli_fone3,
         cli_fax,
         cli_rg,
         cli_cpf_cnpj,
         cli_mail,
         cli_site,
         cli_limite,
         cli_saldo,
         cli_tipo,
         cli_tabela,
         status,
         cli_foto,
         cli_obs,
         data_cad,
         data_alt,
         cli_nascimento,
         cli_creditoconsumo,
         cli_creditotipo,
         cli_razao,
         cli_validadecartao,
         cli_complemento,
         cli_contato,
         cli_categoria,
         cli_classe,
         cli_login,
         cli_senha,
         cli_vendas,
         cli_suframa,
         usu_id,
         usu_login,
         loj_id,
         data_bloqueio,
         motivo_bloqueio,
         data_desbloqueio,
         motivo_desbloqueio,
         rot_id,
         rot_descricao,
         are_descricao,
         set_descricao,
         cli_intinerario,
         isento_icms
    from
        vw_clientes
    where
        cli_nome LIKE  % || :CLIENTE || %

    UNION ALL

    /* CONSULTA PELO CPF OU CNPJ */
    select distinct
         cli_id,
         cli_nome,
         cli_endereco,
         cli_numero,
         cli_bairro,
         cli_cidade,
         cli_cep,
         cli_uf,
         cli_fone1,
         cli_fone2,
         cli_fone3,
         cli_fax,
         cli_rg,
         cli_cpf_cnpj,
         cli_mail,
         cli_site,
         cli_limite,
         cli_saldo,
         cli_tipo,
         cli_tabela,
         status,
         cli_foto,
         cli_obs,
         data_cad,
         data_alt,
         cli_nascimento,
         cli_creditoconsumo,
         cli_creditotipo,
         cli_razao,
         cli_validadecartao,
         cli_complemento,
         cli_contato,
         cli_categoria,
         cli_classe,
         cli_login,
         cli_senha,
         cli_vendas,
         cli_suframa,
         usu_id,
         usu_login,
         loj_id,
         data_bloqueio,
         motivo_bloqueio,
         data_desbloqueio,
         motivo_desbloqueio,
         rot_id,
         rot_descricao,
         are_descricao,
         set_descricao,
         cli_intinerario,
         isento_icms
    from
        vw_clientes
    where
        cli_cpf_cnpj LIKE  % || :CLIENTE || %

    UNION ALL

    /* CONSULTA PELO CODIGO */
    select
         cli_id,
         cli_nome,
         cli_endereco,
         cli_numero,
         cli_bairro,
         cli_cidade,
         cli_cep,
         cli_uf,
         cli_fone1,
         cli_fone2,
         cli_fone3,
         cli_fax,
         cli_rg,
         cli_cpf_cnpj,
         cli_mail,
         cli_site,
         cli_limite,
         cli_saldo,
         cli_tipo,
         cli_tabela,
         status,
         cli_foto,
         cli_obs,
         data_cad,
         data_alt,
         cli_nascimento,
         cli_creditoconsumo,
         cli_creditotipo,
         cli_razao,
         cli_validadecartao,
         cli_complemento,
         cli_contato,
         cli_categoria,
         cli_classe,
         cli_login,
         cli_senha,
         cli_vendas,
         cli_suframa,
         usu_id,
         usu_login,
         loj_id,
         data_bloqueio,
         motivo_bloqueio,
         data_desbloqueio,
         motivo_desbloqueio,
         rot_id,
         rot_descricao,
         are_descricao,
         set_descricao,
         cli_intinerario,
         isento_icms
    from
        vw_clientes
    where
        vw_clientes.cli_id = (SELECT RESULTADO FROM EXTRAI_INTEIRO(:CLIENTE))

    INTO :CLI_ID,
         :CLI_NOME,
         :CLI_ENDERECO,
         :CLI_NUMERO,
         :CLI_BAIRRO,
         :CLI_CIDADE,
         :CLI_CEP,
         :CLI_UF,
         :CLI_FONE1,
         :CLI_FONE2,
         :CLI_FONE3,
         :CLI_FAX,
         :CLI_RG,
         :CLI_CPF_CNPJ,
         :CLI_MAIL,
         :CLI_SITE,
         :CLI_LIMITE,
         :CLI_SALDO,
         :CLI_TIPO,
         :CLI_TABELA,
         :STATUS,
         :CLI_FOTO,
         :CLI_OBS,
         :DATA_CAD,
         :DATA_ALT,
         :CLI_NASCIMENTO,
         :CLI_CREDITOCONSUMO,
         :CLI_CREDITOTIPO,
         :CLI_RAZAO,
         :CLI_VALIDADECARTAO,
         :CLI_COMPLEMENTO,
         :CLI_CONTATO,
         :CLI_CATEGORIA,
         :CLI_CLASSE,
         :CLI_LOGIN,
         :CLI_SENHA,
         :CLI_VENDAS,
         :CLI_SUFRAMA,
         :USU_ID,
         :USU_LOGIN,
         :LOJ_ID,
         :DATA_BLOQUEIO,
         :MOTIVO_BLOQUEIO,
         :DATA_DESBLOQUEIO,
         :MOTIVO_DESBLOQUEIO,
         :ROT_ID,
         :ROT_DESCRICAO,
         :ARE_DESCRICAO,
         :SET_DESCRICAO,
         :CLI_INTINERARIO,
         :ISENTO_ICMS
  DO
  BEGIN
    SUSPEND;
  END
END


Mas os registros estão duplicando. O que pode ser? Já tentei fazer de outras formas mas eles estão duplicando do mesmo jeito.
Sidney Abreu

Sidney Abreu

Responder

Posts

03/11/2011

Wilson Junior

Está duplicando porque vc faz UNION ALL. Lhe aconselho a fazer uma SP para cada tipo de consulta (RazaoSocial, NomeFantasia, etc.).

Espero ter colaborado.
Responder

Gostei + 0

03/11/2011

Emerson Nascimento

tente com esta alteração.

mas você precisa GARANTIR QUE HÁ SOMENTE 1 SETOR E 1 AREA PARA CADA ROTA, caso contrário você terá registros duplicados, visto que você quer exibir o setor e a áera na consulta.


CREATE OR ALTER VIEW VW_CLIENTES(
CLI_ID,
CLI_NOME,
CLI_ENDERECO,
CLI_NUMERO,
CLI_BAIRRO,
CLI_CIDADE,
CLI_CEP,
CLI_UF,
CLI_FONE1,
CLI_FONE2,
CLI_FONE3,
CLI_FAX,
CLI_RG,
CLI_CPF_CNPJ,
CLI_MAIL,
CLI_SITE,
CLI_LIMITE,
CLI_SALDO,
CLI_TIPO,
CLI_TABELA,
STATUS,
CLI_FOTO,
CLI_OBS,
DATA_CAD,
DATA_ALT,
CLI_NASCIMENTO,
CLI_CREDITOCONSUMO,
CLI_CREDITOTIPO,
CLI_RAZAO,
CLI_VALIDADECARTAO,
CLI_COMPLEMENTO,
CLI_CONTATO,
CLI_CATEGORIA,
CLI_CLASSE,
CLI_LOGIN,
CLI_SENHA,
CLI_VENDAS,
CLI_SUFRAMA,
USU_ID,
USU_LOGIN,
LOJ_ID,
DATA_BLOQUEIO,
MOTIVO_BLOQUEIO,
DATA_DESBLOQUEIO,
MOTIVO_DESBLOQUEIO,
ROT_ID,
ROT_DESCRICAO,
ARE_DESCRICAO,
SET_DESCRICAO,
CLI_INTINERARIO,
ISENTO_ICMS)
AS
select distinct
clientes.cli_id,
clientes.cli_nome,
clientes.cli_endereco,
clientes.cli_numero,
clientes.cli_bairro,
clientes.cli_cidade,
clientes.cli_cep,
clientes.cli_uf,
clientes.cli_fone1,
clientes.cli_fone2,
clientes.cli_fone3,
clientes.cli_fax,
clientes.cli_rg,
clientes.cli_cpf_cnpj,
clientes.cli_mail,
clientes.cli_site,
clientes.cli_limite,
clientes.cli_saldo,
clientes.cli_tipo,
clientes.cli_tabela,
case clientes.status
when 0 then ATIVO
when 1 then INATIVO
when 2 then BLOQUEADO
end as STATUS,
clientes.cli_foto,
clientes.cli_obs,
clientes.data_cad,
clientes.data_alt,
clientes.cli_nascimento,
clientes.cli_creditoconsumo,
clientes.cli_creditotipo,
clientes.cli_razao,
clientes.cli_validadecartao,
clientes.cli_complemento,
clientes.cli_contato,
clientes.cli_categoria,
clientes.cli_classe,
clientes.cli_login,
clientes.cli_senha,
clientes.cli_vendas,
clientes.cli_suframa,
clientes.usu_id,
usuarios.usu_login,
clientes.loj_id,
clientes.data_bloqueio,
clientes.motivo_bloqueio,
clientes.data_desbloqueio,
clientes.motivo_desbloqueio,
clientes.rot_id,
rotas.rot_descricao,
areas.are_descricao,
setores.set_descricao,
clientes.cli_intinerario,
clientes.isento_icms
from clientes
inner join rotas on rotas.rot_id = clientes.rot_id
inner join on setores
on (setores.rota1 = rotas.rot_id)
or (setores.rota2 = rotas.rot_id)
or (setores.rota3 = rotas.rot_id)
or (setores.rota4 = rotas.rot_id)
or (setores.rota5 = rotas.rot_id)
or (setores.rota6 = rotas.rot_id)
or (setores.rota7 = rotas.rot_id)
inner join areas on areas.are_id = setores.are_id
left join usuarios on usuarios.usu_id = clientes.usu_id;

Responder

Gostei + 0

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

Aceitar