Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошиька. Нужна консультация. 
:(
    Опции темы
ParaQwest
Дата 25.12.2005, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.12.2005

Репутация: нет
Всего: нет



Есть запрос:
Код

select top 3 * from (select top 3 * from (select top 6 * from pager order by order_value asc) order by order_value desc) order by order_value asc

Но он не работает с ошибкой:
Incorrect syntax near the keyword 'order'.
Нашел пример, где появляется странная синтаксическая кострукция:
Код

select top 3 * from (select top 3 * from (select top 6 * from pager order by order_value asc) x order by order_value desc) x order by order_value asc

так почти работает, но порядок сортировки в итоге не совсем корректный.
Подскажите, pls, что это за "x" и откуда он взялся?

Это сообщение отредактировал(а) ParaQwest - 26.12.2005, 17:41
PM MAIL   Вверх
boevik
Дата 25.12.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Когда select используется в from, то select-у дается виртуальное имя (alias). По alias можно к его полям select-a.
Что значит не совсем корректный?



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 25.12.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Вообще сам запрос по сути идиотский... достаточно понять что автор пытается получить - сразу станет смешно.

Кстати, использование одного и того же алиаса для внешнего и внутреннего запросов - по-моему некорректно...

ParaQwest
Код положено обрамлять тегом "Код" (кнопочку видишь? - вызови свой пост на редактирование, поиграй кнопочкой и смотри что получается на предварительном просмотре, а потом сделай как надо).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ParaQwest
Дата 26.12.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.12.2005

Репутация: нет
Всего: нет



Akina
если не очень трудно, предложите свой вариант получения данных из таблицы блоками(страницами) по номеру блока и количеству записей в нем. smile
boevik
не совсем корректный результат запроса:
данные получены, но не в том порядке.
PM MAIL   Вверх
Akina
Дата 26.12.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(ParaQwest @ 26.12.2005, 18:56)
предложите свой вариант получения данных из таблицы блоками(страницами) по номеру блока и количеству записей в нем

что значит - свой? твой никакими блоками ничего не даст... а если тебе нужен блок - самое тебе милое дело создать курсор (forward-only, чтобы побыстрее работало) и процедурой выгребать этим курсором страницу записей по переданным ей параметрам.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 26.12.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(ParaQwest @ 26.12.2005, 17:56)
не совсем корректный результат запроса:
данные получены, но не в том порядке

Приведи пример.


Цитата(ParaQwest @ 26.12.2005, 17:56)
если не очень трудно, предложите свой вариант получения данных из таблицы блоками(страницами) по номеру блока и количеству записей в нем

К примеру:
Код

select identity(int, 1, 1)  [id],  *
into #t
from pager 
order by order_value asc

select *
from #t
where [id] between 3 and 6
order by [id]


Это сообщение отредактировал(а) boevik - 26.12.2005, 18:13


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 26.12.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



А если все-таки хочется остаться в таком крокодиле, то

Код

select Alias2.* 
from 
(
   select top records_on_page Alias1.* 
   from
   (
      select top (records_on_page*Page_number) *
      from pager 
      order by order_value 
   ) Alias1
   order by Alias1.order_value desc
) Alias2
order by Alias2.order_value 

Добавлено @ 18:18
Цитата(boevik @ 26.12.2005, 19:11)
where [id] between 3 and 6

наверное от 4 до 6...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 26.12.2005, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Akina, разве следующую конструкцию можно использовать в SQL?


Цитата(Akina @ 26.12.2005, 18:17)
Код

select top (records_on_page*Page_number)




--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 26.12.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(boevik @ 26.12.2005, 19:22)
разве следующую конструкцию можно использовать в SQL?

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.