Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
create table tab1 (streetcode smallint, streetname varchar(10), streettype smallint)
insert into tab1 select 1 , 'московская', 2
insert into tab1 select 2, 'таллинская',2
insert into tab1 select 3 ,'московская', null
create table tab2 (code bit,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102
select code,(select streetname from tab1 where streetcode=tab2.streetcode) from tab2

Помогите пожалуйста, под 3 кодом (streetcode)улицу в tab2 необходимо заменить на 2 код.
22 сен 09, 11:53    [7691395]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Извените не понял чесно...

Вы вот это хотите - UPDATE tab2 SET streetcode=2 WHERE streetcode=3
или нет?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
22 сен 09, 12:01    [7691471]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
да, но чтобы это было автоматизированно не вручную.
22 сен 09, 12:05    [7691495]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt,

не понятно, у Вас что, заносят ошибочные данные, а Вы их хотите автоматически исправлять?
22 сен 09, 12:10    [7691541]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Mari-Salt
да, но чтобы это было автоматизированно не вручную.


Вы мне устроили взрыв мозга… Попробуйте еще раз описать, что вам нужно… Можно на примере…

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
22 сен 09, 12:10    [7691547]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Если PaulYoung угадал, то или триггером, или job (если скорость исправления не критична)…

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
22 сен 09, 12:13    [7691580]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
DENIS_CHEL
Если PaulYoung угадал, то или триггером, или job (если скорость исправления не критична)…
...или сделать так, чтобы данные сразу заносились правильные
22 сен 09, 12:14    [7691591]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
PaulYoung
DENIS_CHEL
Если PaulYoung угадал, то или триггером, или job (если скорость исправления не критична)…
...или сделать так, чтобы данные сразу заносились правильные


+1

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум.
22 сен 09, 12:17    [7691614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
europ
Member

Откуда:
Сообщений: 377
Mari-Salt
да, но чтобы это было автоматизированно не вручную.


Если я вас правильно понял (что просто невозможно), то вы хотите видеть на выходе запрос нужный, а не апдейтить таблицы... Тогда предложу что-то такое:

create table tab1 (streetcode smallint, streetname varchar(10), streettype smallint)
insert into tab1 select 1 , 'московская', 2
insert into tab1 select 2, 'таллинская',2
insert into tab1 select 3 ,'московская', null

create table tab2 (code bit,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102

select tab2.*, tab1.streetname,(select streetname from tab1 where streetcode=tab2.streetcode) as streetname_old
from tab2 Inner Join tab1 On tab1.streetcode = Case When tab2.streetcode = 3 Then 2 Else tab2.streetcode End

drop table tab1
drop table tab2
22 сен 09, 12:29    [7691718]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
europ,

если это так, то лучше себя не обманывать, а возвращать правильные данные, а то потом боком выйдет
22 сен 09, 12:32    [7691742]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
create table tab2 (code bit,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102

Это точно не MSSQL
22 сен 09, 12:34    [7691756]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
vino
Member

Откуда:
Сообщений: 1191
Mari-Salt, нельзя просто заменять ключевой код, нужно сначала скорректировать все ссылки на него, а потом просто удалить дублирующие записи. Так что полностью автоматизировать не выйдет. А вот предотвращать появление новых дубликатов вполне реально с помощью триггера.
22 сен 09, 12:36    [7691780]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Glory
create table tab2 (code bit,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102

Это точно не MSSQL


Просто ТС ошиблась... А так все корректно (кроме того, что в поле code будет просто 1 во четырех картежах)...
22 сен 09, 12:39    [7691796]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Короче у нас есть общая база от 2 офисов. Получилось так что, в течение 2 лет на сервере одного из наших клиентов отредактировали коды, например улицы Московская. Была 1 запись.
В процессе работы мы слили в клиенсткие серверы отличительные записи мы.Такое условие у нас было, ну это не важно.
Короче у нас стало 2 штуки улиц Московская. И когда теперь производят поиск по улице Московская получилось так что выбрали эту улицу а там записей нет. Но под другими кодами улицы Московская много связанных запиесй. Поэтому нужет скрипт.
22 сен 09, 12:45    [7691849]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt,

делать, судя по всему, придется так, как советовал vino, но тут нужно знать все связи улиц с другими объектами вашей БД.
22 сен 09, 12:50    [7691891]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
create table tab1 (streetcode smallint, streetname varchar(10), streettype smallint)
insert into tab1 select 1 , 'московская', 2
insert into tab1 select 2, 'таллинская',2
insert into tab1 select 3 ,'московская', null
insert into tab1 select 4 ,'озерная ', null

create table tab2 (code smallint,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102
insert into tab2 select 5,4,102
select code,(select streetname from tab1 where streetcode=tab2.streetcode) from tab2

update tab2
set streetcode=(select streetcode from tab1 where streettype is null)
from tab2
where ....
22 сен 09, 12:55    [7691936]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt
create table tab1 (streetcode smallint, streetname varchar(10), streettype smallint)
insert into tab1 select 1 , 'московская', 2
insert into tab1 select 2, 'таллинская',2
insert into tab1 select 3 ,'московская', null
insert into tab1 select 4 ,'озерная ', null

create table tab2 (code smallint,streetcode smallint, citycode smallint)
insert into tab2 select 1,1,102
insert into tab2 select 2,1,102
insert into tab2 select 3,3,102
insert into tab2 select 4,2,102
insert into tab2 select 5,4,102
select code,(select streetname from tab1 where streetcode=tab2.streetcode) from tab2

update tab2
set streetcode=(select streetcode from tab1 where streettype is null)
from tab2
where ....
22 сен 09, 12:57    [7691952]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
vino
Mari-Salt, нельзя просто заменять ключевой код, нужно сначала скорректировать все ссылки на него, а потом просто удалить дублирующие записи. Так что полностью автоматизировать не выйдет. А вот предотвращать появление новых дубликатов вполне реально с помощью триггера.


Как раз для этого и мне нужен скрипт
22 сен 09, 13:02    [7691986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить