Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Оперативно заменить значение (число прочтений - 3007 )
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Оперативно заменить значение
10. Ноября 2006 :: 07:10
Печать  
Нужно выбрать из справочника первые два символа кода:
ТекстЗапроса3 = "         
           |SELECT                         
           |  Left(Спр.CODE,2) as Коде,            
           |FROM            
              |  $Справочник.Номенклатура as Спр            
           |GROUP BY
           | Left(Спр.CODE,2)
           |";
В выборке присуствуют три кода A1, A2, A3 . А как в запросе заменить сразу A2 на A1, чтобы в результате остались A1 (совмещенный с A2) и A3?
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #1 - 10. Ноября 2006 :: 07:35
Печать  
если SQL:
Код
Выбрать все
ТекстЗапроса3 = "
	     |SELECT
	     |  CASE Left(Спр.CODE,2)
	     |  WHEN 'A2' THEN 'A1'
	     |  ELSE Left(Спр.CODE,2) END as Коде,
	     |FROM
		  |  $Справочник.Номенклатура as Спр
	     |GROUP BY
	     |  CASE Left(Спр.CODE,2)
	     |  WHEN 'A2' THEN 'A1'
	     |  ELSE Left(Спр.CODE,2) END
	     |"; 



если dbf, то подобная конструкция с IIF(,,)
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #2 - 10. Ноября 2006 :: 09:27
Печать  
DrACe писал(а) 10. Ноября 2006 :: 07:35:
если SQL:
Код
Выбрать все
ТекстЗапроса3 = "	  
	     |SELECT				  
	     |  CASE Left(Спр.CODE,2)
	     |  WHEN 'A2' THEN 'A1'
	     |  ELSE Left(Спр.CODE,2) END as Коде,
	     |FROM
		  |  $Справочник.Номенклатура as Спр
	     |GROUP BY  
	     |  CASE Left(Спр.CODE,2)
	     |  WHEN 'A2' THEN 'A1'
	     |  ELSE Left(Спр.CODE,2) END
	     |"; 



если dbf, то подобная конструкция с IIF(,,)


Я бы вообще-то на оптимизацию SQL-парсера не надеялся:
Код
Выбрать все
ТекстЗапроса3 = "	  
	     |SELECT Коде				  
	     |FROM				  
	     |(				  
	     |SELECT				  
	     |  CASE Left(Спр.CODE,2)
	     |  WHEN 'A2' THEN 'A1'
	     |  ELSE Left(Спр.CODE,2) END as Коде,
	     |FROM
	    | $Справочник.Номенклатура as Спр
	    |) Pre
	     |GROUP BY  
	     |  Коде
	     |"; 



Хотя, конечно, результат тот же Подмигивание
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Оперативно заменить значение
Ответ #3 - 10. Ноября 2006 :: 11:01
Печать  
Спасибо  Смех
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #4 - 10. Ноября 2006 :: 12:06
Печать  
Quan писал(а) 10. Ноября 2006 :: 09:27:
Я бы вообще-то на оптимизацию SQL-парсера не надеялся:

Ни фига не понял, а в чем грабли?
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #5 - 10. Ноября 2006 :: 17:59
Печать  
Arta писал(а) 10. Ноября 2006 :: 12:06:
Quan писал(а) 10. Ноября 2006 :: 09:27:
Я бы вообще-то на оптимизацию SQL-парсера не надеялся:

Ни фига не понял, а в чем грабли?


В первом случае сначала считаются вычисляемые поля с сохранением в промежуточном результате исходных значений, а потом промежуточная таблица с уже готовыми выходными полями заново вычисляет значения группировки.
Во втором - формируется готовая выходная таблица, которая группируется по уже вычисленным выходным данным.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #6 - 10. Ноября 2006 :: 18:00
Печать  
Упс... теперь въехалУлыбка
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #7 - 11. Ноября 2006 :: 09:12
Печать  
Quan писал(а) 10. Ноября 2006 :: 17:59:
Arta писал(а) 10. Ноября 2006 :: 12:06:
Quan писал(а) 10. Ноября 2006 :: 09:27:
Я бы вообще-то на оптимизацию SQL-парсера не надеялся:

Ни фига не понял, а в чем грабли?


В первом случае сначала считаются вычисляемые поля с сохранением в промежуточном результате исходных значений, а потом промежуточная таблица с уже готовыми выходными полями заново вычисляет значения группировки.
Во втором - формируется готовая выходная таблица, которая группируется по уже вычисленным выходным данным.

На самом деле, планы выполнения этих запросов одинаковы. И такой же план, к стати, у запроса SELECT DISTINCT...
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Оперативно заменить значение
Ответ #8 - 11. Ноября 2006 :: 10:05
Печать  
berezdetsky писал(а) 11. Ноября 2006 :: 09:12:
На самом деле, планы выполнения этих запросов одинаковы.


гм.... Ну, значит у оптимизатора мозгов в данном случае хватает. Что случается далеко не всегда; во времякритичных ситуациях лучше все же самому подсуетиться.

berezdetsky писал(а) 11. Ноября 2006 :: 09:12:
И такой же план, к стати, у запроса SELECT DISTINCT...


О! А вот это, пожалуй, даже идеологически более правильное решение. Я как-то забыл про него Улыбка
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать