none
Comparaçao dentro de um range RRS feed

  • Pergunta

  • Boas pessoal, mais uma vez vim pedir uma ajuda aos senhores hoje me dei com um caso um tanto confuso para explicar 

    tentarei ser o mais claro e direto é assim:

    eu tenho uma tabela A onde eu tenho os campos codesc, codigo municipio,codigo distrito  e outra tabela B que é fonte do ibge 

    onde tem codigo municipio,municipio, distrito ,codigo distrito, pois bem 

    eu preciso dar um update nos codigo distrito na tabela A onde o municipio dela nao esteja de acordo o distrito da tabela B por exemplo um municipio de codigo 35500 pode ter varios codigo de distrito 05,10,15,20 e na minha tabela A esteja com o codigo do distrito 02 ela ja estaria errada

    nao sei se ficou bem claro, pareçe simples mais nao achei uma soluçao ate agora obrigado aos que puderem ajudar.




    • Editado Uelson.Jr sexta-feira, 28 de junho de 2013 21:12 retificaçao
    sexta-feira, 28 de junho de 2013 19:39

Respostas

Todas as Respostas

  • Boa tarde,

    Não sei se entendi corretamente a questão, mas experimente mais ou menos dessa forma:

    update a
    set CodigoDistrito = b.CodigoDistrito
    from TabelaA as a
    inner join TabelaB as b
        on b.CodigoMunicipio = a.CodigoMunicipio
    where
        a.CodigoDistrito <> b.CodigoDistrito

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de junho de 2013 20:01
  • Deleted
    sexta-feira, 28 de junho de 2013 20:02
  • Gapimex obrigado, eu tinha feito exatamente isso so que aconteçe e que no join ele junta aleatoriamente

    o municipio da tabela A e B ficam igual ate ai OK so que os que estao certo tambem vao fazer porque dentro de um municipio vai ter varios distrito.. exemplo 

    create table #a
    (
    codesc nvarchar (10),
    codmun nvarchar (10),
    coddistr nvarchar (10)
    )

    insert into #a values ('35022445','3505500','40')
    insert into #a values ('35022550','3505500','50')
    insert into #a values ('35022560','3505500','15')
    insert into #a values ('35022570','3505500','05')

    create table #b
    (
    codmun nvarchar (10),
    coddistr nvarchar (10)

    insert into #b values ('3505500','15')
    insert into #b values ('3505500','05')
    insert into #b values ('3501000','40')
    insert into #b values ('3502000','50')




    begin tran 
    update #a set #a.coddistr = #b.coddistr from #a inner join #b on #a.codmun = #b.codmun

    rollback

    veja que tenho 2 registro da tabela A com valores de distrito errado ele ira fazer para os 4 ignorando os que estavam certo

    sexta-feira, 28 de junho de 2013 20:33
  • Isso mesmo Jose so que o distrito pode ter o mesmo codigo de outro municipio ai quem determina é o municipio

    exemplo 

    codmun->11 = sao paulo distritos in (10,11,12)

    codmun->22 = guarulhos distrito in (10,15,25) 

    meio dificil trabalhar assim mais é o jeito que esta

    sexta-feira, 28 de junho de 2013 20:38
  • Perfeito jose isso mesmo 
    sexta-feira, 28 de junho de 2013 20:45
  • Uelson, considerando essa amostra de dados que você postou para as tabelas A e B, como deveriam ficar os dados da tabela A após o Update?

    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de junho de 2013 20:52
  • Gapimex, aos distritos que nao pertecem ao municipio correspondente devem ficar com um valor 05 

    no caso do exemplo seria com os codigo 35022445, 35022550  

    sexta-feira, 28 de junho de 2013 20:58
  • Mas por que 05?

    Seria o menor código de distrito do munícipio? 

    Senão, qual é o critério?


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de junho de 2013 21:03
  • isso mesmo gapimex, o menor pq assim eu nao tenho como falar qual o distrito exato para aquele municipio 

    como o arquivo passa por um sistema de validaçao eu nao consigo passar ele ai a soluçao que encontrei foi pegar o menor valor de distrito para o municipio que esta com o codigo de distrito nao correspondete a ele

    e isso sera aberto posteriormente para retificaçao 

    sexta-feira, 28 de junho de 2013 21:10
  • Experimente dessa forma:

    update a
    set a.coddistr = 
            (select MIN(s.coddistr)  
             from TabelaB as s
             where s.codmun = a.codmun)
    from TabelaA as a
    left join TabelaB as b
        on
            b.codmun = a.codmun and
            b.coddistr = a.coddistr
    where b.coddistr is null
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Uelson.Jr sábado, 29 de junho de 2013 03:53
    sexta-feira, 28 de junho de 2013 21:23
  • Deleted
    sexta-feira, 28 de junho de 2013 22:36
  • Gapimex obrigado mais nao deu certo cara, pq ele faz ate para os que ja estao certo ai aconteçe de eu dar um jeito em uma e mexer nos que ja estao certo
    sexta-feira, 28 de junho de 2013 23:34
  • Jose é exatamente isso vc soube explicar melhor que eu,  somente para alguns casos o distrito varia entre 18,60 17 e por ai vai....e realmente o programa é feito em cobol sim , o que eu queria fazer era seguir na logica que tinha falado com o gapemix se o distrito+municipio da minha tabela nao estivesse de acordo com o municipio+distrito da tabela do ibge ele pegasse algum valor de distrito que fosse valido dentro do municipio (obviamente nao seria fidedigno pq eu estaria "burlando a regra de verificaçao") mais é uma alternativa 

    como eu passo por arquivo txt o arquivo volta e eu acabo colocando la na mao aleatoriamente 

    sábado, 29 de junho de 2013 00:04
  • Deleted
    • Marcado como Resposta Uelson.Jr sábado, 29 de junho de 2013 03:53
    sábado, 29 de junho de 2013 00:42
  • Deleted
    sábado, 29 de junho de 2013 01:52
  • Entao jose, é isso mesmo 35 significa estado de SP por isso se vc ignorar os 2 primeiros digitos eles vao se repetir, eu upei no 4shared a tabela de municipio veja so.. como isso é disponibilizado em varios sites nao vejo 

    problema.

    http://www.4shared.com/file/P3W1pI2S/Tabela_de_Distritos__2013.html

    Que se relacione com a de municipio nao a codesc é a minha chave primaria depois vem codigo municipio e codigo distrito 

    entao assim eu tenho um codesc unico com um codigo do municipio e um codigo do distrito so que o sistema nao esta consistindo essa regra de se o municipio tem tal codigo devera pertencer a um dos distritos disponiveis mais isso é um erro que ja percebemos e depois de migramos sera aberto um periodo para retificaçao por isso esta sendo necessario "burlar a verificaçao"

    retificaçao: Pessoal testei aqui em casa com calma e deu certo o modo que o gapimex disse na 2º postagem  na correria eu devo ter deixado passar algo, mais obrigado mais uma vez tanto vc Jose quanto o Gapimex que ja me ajudou em outros casos

    abraços...


    • Editado Uelson.Jr sábado, 29 de junho de 2013 04:04 iiii
    sábado, 29 de junho de 2013 03:08