Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > SQL Запрос c условием


Автор: TBD 8.6.2006, 21:37
Привет всем.....

Вот есть таблица tabl в ней поле  rez 
Нужно выбрать записи у которых rez = "MAX" ( текстовое значение) и если таких значений меньше 10, то
необходимо довыбрать оставщиеся данные чтоб было 10 значений.
Rez например может быть -> "MAX" или любым числом...

Как составить? smile 
 

Автор: skyboy 8.6.2006, 22:02
Код

SELECT * FROM tabl WHERE rez="MAX"
UNION
SELECT * FROM tabl WHERE NOT(rez="MAX")
LIMIT 10
 

Автор: TBD 8.6.2006, 23:19
Пасиб skyboy

А почему у меня JetSql ругается на LIMIT 10?
Пишет ошибка синтаксиса 

как сделать это же только без limit?
   

Автор: skyboy 8.6.2006, 23:27
TBD, оп-а smile Тогда СУБД не работает с ограничением на количество(если опечатки не было) и 10 отбирать тебе придётся из всех записей. Одно хорошо - имеешь порядок нужный.   

Автор: TBD 8.6.2006, 23:36
Млин фигово.....
Если вдруг кто знает отпишите плз. smile  

Автор: ТоляМБА 9.6.2006, 06:09
Код

Select TOP 2 *
from Table1
Order by Field1
Выбирает 2 первые строки из таблицы отсортированные по полю Field1. Припаивай TOP к своему запросу и вперёд! 

Автор: Akina 9.6.2006, 08:23
Т.е.

Код

Select Top 10 
From
(
    SELECT * 
    FROM tabl 
    WHERE rez="MAX"
  UNION
    SELECT * 
    FROM tabl 
    WHERE NOT(rez="MAX")
)
Order By Iif(rez="MAX",0,1) 
 

Автор: skyboy 9.6.2006, 11:16
м. Если делать ORDER, то можно обойтись и без WHERE в явном виде smile
 
Код

Select Top 10    
From    
(    
    SELECT tabl.*,(rez="MAX") as Flag
    FROM tabl    
    WHERE rez="MAX"    
    Order By Flag
)    

Вот только не знаю, насколько это близко духу SQL Access'a smile 

Автор: Akina 9.6.2006, 11:48
Цитата(skyboy @  9.6.2006,  12:16 Найти цитируемый пост)
не знаю, насколько это близко духу SQL Access'a 
Да, Аксессу надо такое:
Код
Select Top 10 *, Iif(rez="MAX",0,1) As Flag
FROM tabl 
Order By Iif(rez="MAX",0,1)
но это добавляет лишнее нафиг ненужное поле... впрочем накладнЫе расходы невелики.  

Автор: TBD 9.6.2006, 12:19
Пасиб ребята за ответы smile ...
Теперь буду пробовать, что тут да как работает. 
 

Автор: Akina 9.6.2006, 12:51
TBD, учти, если у тебя более 10 записей, удовлетворяющих условию - незвестно какие именно будут выданы. Так что добавь второй критерий сортировки в запрос на всякий случай - после iif. 

Автор: TBD 9.6.2006, 21:52
Да не все нормально только нерадует то, что цифровые значения в текстовом поле воспринимаются криво.
Типа "5" > "35" smile 
 

Автор: Akina 10.6.2006, 23:44
Цитата(TBD @  9.6.2006,  22:52 Найти цитируемый пост)
нерадует то, что цифровые значения в текстовом поле воспринимаются криво.

В текстовом поле хранятся текстовые значения. И если тебе нужны были числа, а ты сделал текст - то из вас двоих кривизна ну никак не у Аксесса.

Вместо order by SomeField используй order by Val(SomeField) 

Автор: TBD 11.6.2006, 23:38
Ого=)......до Val еще не дошел
Значит попробуем....
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)