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

Откуда:
Сообщений: 251
update [тест] set  [тест].[Холдинги/прочие]=case
when [тест].[G021] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ЭК',[тест].[Импорт/экспорт])<>0)  then (select top (1)[спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G021=[спр_железка_таможня].[ИНН])  
when [тест].[G081] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ИМ',[тест].[Импорт/экспорт])<>0)  then (select top (1) [спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G081=[спр_железка_таможня].[ИНН]) 
end;


есть таблица связь_товар_предприятие(id_товар,id_предприятие,тип_предприятия) содержит информацию о том какой холдинг производит какой товар.
пример строки таблицы
5 15 Холдинг
6 25 Холдинг

товар 5 производит предприятие 15,которое является холдингом
товар 6 производит предприятие 25, которое является холдингом

существуют также таблицы товар, которая содержит информацию о товаре
и таблица спр_железка_таможня,которая содержит информацию о предприятиях
(id,наименование, группа предприятия, инн,окпо)
каждое предприятие может содержать несколько ОКПО, поэтому по одному предприятию в таблице может быть несколько строк.

вышеописанный запрос должен в таблице тест относить в зависимости от товара предприятие к холдингам или оставлять поле пустым.
он работает неправильно, в не зависимости от того что [связь_товар_предприятие].[id_товар]='5' он обновляет все строки таблицы, хотя она содержит разные товары
помогите пожалуйста исправить запрос
4 дек 12, 12:16    [13574175]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
iap
Member

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

UPDATE без WHERE обновляет всю таблицу.
Вы считаете это неправильным?

Посмотрите в BOL на UPDATE ... SET ... FROM ... JOIN ... JOIN ... WHERE ...
4 дек 12, 12:22    [13574231]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
iap,
c какой это стати если четко написано

select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5'


строчки в которых товар с другим кодом должны игнорироваться.....
или я чего-то не понимаю
4 дек 12, 14:51    [13575631]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
iap,

update [тест] set  [тест].[Холдинги/прочие]=(select case
when [тест].[G021] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ЭК',[тест].[Импорт/экспорт])<>0)  then (select top (1)[спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G021=[спр_железка_таможня].[ИНН])  
when [тест].[G081] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ИМ',[тест].[Импорт/экспорт])<>0)  then (select top (1) [спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G081=[спр_железка_таможня].[ИНН]) 
end)
from [связь_товар_предприятие],[спр_железка_таможня]
where  [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] 


так тоже не работает(((
4 дек 12, 14:53    [13575652]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2567
ola_ya_22
или я чего-то не понимаю
учить, учить, учить BOL
4 дек 12, 14:54    [13575661]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
PaulYoung, вроде заработало))))
4 дек 12, 15:06    [13575791]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2567
ola_ya_22
PaulYoung, вроде заработало))))
Неужто BOL выучили?
4 дек 12, 15:07    [13575798]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
ola_ya_22
from [связь_товар_предприятие],[спр_железка_таможня]
where [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id]

так тоже не работает(((

И где тут фильтр по таблице, которая собственно обновляется ?
4 дек 12, 15:08    [13575809]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ola_ya_22
iap,

update [тест] set  [тест].[Холдинги/прочие]=(select case
when [тест].[G021] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ЭК',[тест].[Импорт/экспорт])<>0)  then (select top (1)[спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G021=[спр_железка_таможня].[ИНН])  
when [тест].[G081] in (select [спр_железка_таможня].[ИНН] from  [спр_железка_таможня],[связь_товар_предприятие] where [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] and [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[Тип_предприятия]='Холдинг') and (charindex('ИМ',[тест].[Импорт/экспорт])<>0)  then (select top (1) [спр_железка_таможня].[Группа предприятия] from [спр_железка_таможня] where [тест].G081=[спр_железка_таможня].[ИНН]) 
end)
from [связь_товар_предприятие],[спр_железка_таможня]
where  [связь_товар_предприятие].[id_товар]='5' and [связь_товар_предприятие].[id_предприятие]=[спр_железка_таможня].[id] 


так тоже не работает(((
Во-первых, забудьте про запятую во FROMе. Я ж Вам типа шаблона написал с JOINами...
Во-вторых, просто прочитайте: http://msdn.microsoft.com/ru-ru/library/ms177523(v=sql.100).aspx
4 дек 12, 15:30    [13576018]     Ответить | Цитировать Сообщить модератору
 Re: Запрос  [new]
iap
Member

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

ТOP(1) без ORDER BY что у Вас означает? "Всё равно что", так что ли?
4 дек 12, 15:34    [13576057]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить