Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Номер записи в SELECT (число прочтений - 3867 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Номер записи в SELECT
07. Августа 2007 :: 13:38
Печать  
Мне требуется в сформированной выборке заполнить поле по возрастанию(типа по счетчику) от 1 и до конца выборки (количества значений в выбоке).
Можно ли это каким-то образом сделать в самом запросе?
Уж больно не хочется получил выборку проходить по ней и заполнять это поле, а потом через Insert выгружать в таблицу.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Номер записи в SELECT
Ответ #1 - 07. Августа 2007 :: 13:52
Печать  
Вопрос уже обсуждался, ищи. + есть в ФАКе на sql.ru
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Номер записи в SELECT
Ответ #2 - 07. Августа 2007 :: 13:56
Печать  
JohnyDeath писал(а) 07. Августа 2007 :: 13:52:
Вопрос уже обсуждался, ищи. + есть в ФАКе на sql.ru

все бы хорошо, да вот только запрос-то у меня к DBF базе и использую я OLEDB, по сему данные в факе варианты мене не подходят.
Моежт кто чет другое предложит?
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Номер записи в SELECT
Ответ #3 - 07. Августа 2007 :: 14:33
Печать  
Свой запрос выгружаешь во врем. таблицу. Например temp.dbf
второй запрос выглядит так:
Код
Выбрать все
Select RECNO() as N, * from temp.dbf 

  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Номер записи в SELECT
Ответ #4 - 07. Августа 2007 :: 15:00
Печать  
2 и 3 вариант
Код
Выбрать все
	test="
	|(Select
	|	 ВрЖур.IDDoc  as id_test
	|  from   1sjourn as ВрЖур
	|  WHERE
	|     ВрЖур.date BETWEEN :НачДата~~ AND :КонДата~~ )  ";

	текстЗапроса = "
	|select
	|   count (test_2.id_test) as rank,
	|   test_1.id_test
	|from "+test+" as test_1
	|
	|inner join "+test+" as test_2 on
	|	  test_1.id_test >= test_2.id_test
	|group by test_1.id_test
	|order by rank  ";
 



в приведенной ссылке также рабочие - но время выполнения - жесть.

Насчет выгрузки во временную таблицу - наверно тоже по времени хуже, чем добавление столбца в ТЗ.
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Номер записи в SELECT
Ответ #5 - 07. Августа 2007 :: 15:21
Печать  
Цитата:
Насчет выгрузки во временную таблицу - наверно тоже по времени хуже, чем добавление столбца в ТЗ.


А с учетом этого?
Цитата:
Уж больно не хочется получил выборку проходить по ней и заполнять это поле, а потом через Insert выгружать в таблицу.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Номер записи в SELECT
Ответ #6 - 08. Августа 2007 :: 12:59
Печать  
Оргомаднейшее спасибо
Получилось!
вот через 1СQA такой запрос
select
count (test_2.id_test) as rank,
test_1.id_test
from
(Select
      ВрЖур.IDDoc  as id_test
  from   1sjourn as ВрЖур
  WHERE 
(DTOS(ВрЖур.date)+ВрЖур.time+ВрЖур.iddoc BETWEEN (DTOS(:НачДата~~)+'               ') AND DTOS(:КонДата~~)+'ZZZZZZZZZZZZZZZ')) as test_1
inner join
(Select
      ВрЖур.IDDoc  as id_test
  from   1sjourn as ВрЖур
  WHERE 
(DTOS(ВрЖур.date)+ВрЖур.time+ВрЖур.iddoc BETWEEN (DTOS(:НачДата~~)+'               ') AND DTOS(:КонДата~~)+'ZZZZZZZZZZZZZZZ')) as test_2 on
test_1.id_test >= test_2.id_test
group by test_1.id_test
order by rank
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Номер записи в SELECT
Ответ #7 - 08. Августа 2007 :: 13:50
Печать  
Нет все же с временной таблицей намного быстрее.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Номер записи в SELECT
Ответ #8 - 09. Августа 2007 :: 05:55
Печать  
varelchik писал(а) 08. Августа 2007 :: 13:50:
Нет все же с временной таблицей намного быстрее.


Вообщем RecNo оказалось крутой функцией - во временную таблицу сохранять не надо,
достаточно оформить базовый запрос как подзапрос
Код
Выбрать все
|SELECT
	|  RECNO() as ПорядковыйНомер,
	|  Запрос.Номенклатура
	|
	|FROM
	|(SELECT
	|	СпрНоменклатура.Descr as Номенклатура
	|
	|FROM
	|	$Справочник.Номенклатура as СпрНоменклатура
	| Order BY  Номенклатура
	| ) as Запрос

 



Выполняется практически мгновенно
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Номер записи в SELECT
Ответ #9 - 09. Августа 2007 :: 06:13
Печать  
Прикольно!Это есть только в VFP?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Номер записи в SELECT
Ответ #10 - 09. Августа 2007 :: 07:26
Печать  
JohnyDeath писал(а) 09. Августа 2007 :: 06:13:
Прикольно!Это есть только в VFP?


Это еще цветочки Улыбка

Вот :
Код
Выбрать все
|SELECT
	|  RECNO() as ПорядковыйНомерНаименования,
	|  Запрос.Номенклатура as Номенклатура,
	|  Запрос.Код as Код
	|
	|FROM
	|(SELECT
	|	СпрНоменклатура.Descr as Номенклатура,
	|	СпрНоменклатура.Code as Код
	|
	|FROM
	|	$Справочник.Номенклатура as СпрНоменклатура
	| Order BY  Номенклатура
	| ) as Запрос
	|
	|ORDER BY Код

 



Дважды сортирую и использую данные обоих сортировок Улыбка
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Номер записи в SELECT
Ответ #11 - 09. Августа 2007 :: 07:50
Печать  
Kiruha ты гений!
Точно УРАГАН!
это ж надо!
я то даже и неподумал ,что ведь vfpoledb подзапросы хранит итак в dbf ну или что-то типа того.
Всем огромное спасибо!
Я так думаю что это надо былобы добавить в Учебник по использованию прямых запросов!
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Номер записи в SELECT
Ответ #12 - 09. Августа 2007 :: 08:13
Печать  
kiruha писал(а) 09. Августа 2007 :: 07:26:
Дважды сортирую и использую данные обоих сортировок Улыбка

А я эту фразу не понял Печаль
Поясни как-то более подробно про использование данных обеих сортировок, плиз Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Номер записи в SELECT
Ответ #13 - 09. Августа 2007 :: 08:24
Печать  
artbear писал(а) 09. Августа 2007 :: 08:13:
kiruha писал(а) 09. Августа 2007 :: 07:26:
Дважды сортирую и использую данные обоих сортировок Улыбка

А я эту фразу не понял Печаль
Поясни как-то более подробно про использование данных обеих сортировок, плиз Улыбка


Я раньше думал, что использование ORDER BY не допускается в подзапросах , и допускается его использование
только один раз... Цитата:
ORDER BY использовать в подзапросе нельзя, хотя в главном запросе ORDER BY использоваться может
http://worldsql.by.ru/14/gl14.html

Вот, думаю, наверно это можно использовать как то для более оптимального доступа к периодическим реквизитам... ?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать