Usuário com melhor resposta
Comparaçao dentro de um range

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
Respostas
-
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
-
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
-
-
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
-
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
-
-
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
-
-
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
-
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
-
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
-
-
-
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
-
-
-
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