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

Откуда: SPB
Сообщений: 8
Уважаемые!
есть таблица:

Item1 Item2
1.0 1000
1.1 1100
1.2 1200
1.3 1300

Как выбрать Item2 если Item1 = 1.13 ?

Я пишу:
SELECT Item2 FROM Table
WHERE Item1 > 1.13 AND Item1 < 1.13
но ничего не выбирается...

Очень надеюсь на Вашу помощь!
20 мар 05, 14:45    [1400298]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
Afrikoff
WHERE Item1 > 1.13 AND Item1 < 1.13


В таком диапазоне не может существовать данных.
20 мар 05, 15:19    [1400320]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Michael7
Member

Откуда: Израиль
Сообщений: 928
Использовать округление или
WHERE Item1 between 1.13 AND Item1 1.139999
20 мар 05, 15:19    [1400323]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
Может тебе нужно WHERE Item1 <> 1.13
Привел бы результат вывода, который ты ожидаешь.
20 мар 05, 15:20    [1400324]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
SELECT Item2 FROM Table
WHERE Item1 > 1.13 AND Item1 < 1.13

Еще бы у Вас выбралось, если Вы указываете заведомо невыполнимое условие.
SELECT Item2 FROM Table
WHERE Item1 = 1.13
20 мар 05, 15:20    [1400326]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Michael7
Member

Откуда: Израиль
Сообщений: 928
Гавриленко Сергей Алексеевич
SELECT Item2 FROM Table
WHERE Item1 = 1.13

может не пройти, если у него Item1 - number(8.4) = 1.1301
20 мар 05, 15:30    [1400330]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Michael7
Гавриленко Сергей Алексеевич
SELECT Item2 FROM Table
WHERE Item1 = 1.13

может не пройти, если у него Item1 - number(8.4) = 1.1301

Вот это автору как раз и виднее.
В условии четко написано, что
автор
Как выбрать Item2 если Item1 = 1.13 ?
, а в моем понимании 1.13 <> 1.1301
20 мар 05, 15:33    [1400332]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Michael7
Member

Откуда: Израиль
Сообщений: 928
Гавриленко Сергей Алексеевич
в моем понимании 1.13 <> 1.1301
Может я неудачно выразился, но если тип Item1 не целочисленый, то использовать строгое равенство не рекомендуется: надежнее или диапазон, или округление. Я сам нарывался, когда на экране видишь 1.13, а реально в базе сидит 1.13000000001 или 1.129999999999. Хотя, может быть я неправильно понял вопрос автора.
20 мар 05, 15:46    [1400344]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Michael7
Гавриленко Сергей Алексеевич
в моем понимании 1.13 <> 1.1301
Может я неудачно выразился, но если тип Item1 не целочисленый, то использовать строгое равенство не рекомендуется: надежнее или диапазон, или округление. Я сам нарывался, когда на экране видишь 1.13, а реально в базе сидит 1.13000000001 или 1.129999999999. Хотя, может быть я неправильно понял вопрос автора.

Все, что Вы сказали, справедливо для нецелочисленного типа float, который действительно является приблизительным. Что касается типя decimal - то он точный, и 1.13 будет всегда равно 1.13, а не 1.13000000001 или 1.129999999999.
20 мар 05, 15:51    [1400349]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Afrikoff
Member

Откуда: SPB
Сообщений: 8
я неправильно задал вопрос - по значению Item1 (1.13) нужно найти 2 соседних значения Item2 и далее проинтерполивать
(т.е. - найти MIN and MAX)

Результат должен быть такой

1.1 1100
1.2 1200
20 мар 05, 15:55    [1400351]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Michael7
Member

Откуда: Израиль
Сообщений: 928
SELECT Item2 FROM Table 
WHERE Item1 = (select Max(T.Item1) from Table as T where T.Item1 < 1.13)
Union
SELECT Item2 FROM Table 
WHERE Item1 = (select Min(T.Item1) from Table as T where T.Item1 > 1.13)

P.S.Но я не проверил, как это работает :(
20 мар 05, 16:04    [1400359]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос  [new]
Afrikoff
Member

Откуда: SPB
Сообщений: 8
Спасибо большое Michael7

работает, то что надо.
20 мар 05, 17:01    [1400401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить