2015-02-28 2 views
0

У меня есть запрос ниже, который является частью большего запроса. Я намерен вернуть один результат на основании 1.) идентификатора занятости 2.) Дата изменения ставки. 3.) Специальное правило, если оно существует.Почему запрос Select top 1 возвращает более одного результата?

SELECT TOP 1 rate 

FROM Rate2 
WHERE Rate2.entityno = 805181 
     AND Rate2.changedate <= [01/01/2011] 

     AND IIF(Rate2.SpecialRules = 'SpecialCase', 
       Rate2.SpecialRules = 'SpecialCase', 
       Rate2.SpecialRules = "NA") 

ORDER BY Rate2.changedate DESC; 

вот отрывок из таблицы "rate2"

EntityNo| ChangeDate| Rate| SpecialRules 
805181| Jan-01-2010| 178.00| NA 
805181| Jul-28-2012| 185.00| NA 
805181| Jan-01-2010| 204.00| 'SpecialCase' 

на запросы, я вернуть как 204 и 178 для ставок. Я просто хочу «204», если я ввел «specialCase» или 178, если я ввел «NA». любая помощь будет принята с благодарностью.

Спасибо, и им с помощью Access 2013.

+0

Это может помочь - http://stackoverflow.com/questions/9339079/how-to-select-top-10-in-access-query - вам нужно установить еще одно уникальное поле для включения в ваш 'порядок by'. – sgeddes

+0

@sgeddes спасибо за помощь – Eddy

ответ

0

за sgeddes

Я модифицированными включить еще одно уникальное поле в порядке по п.

SELECT TOP 1 rate 

FROM Rate2 
WHERE Rate2.entityno = p.[test value 1] 
     AND Rate2.changedate <= [01/01/2011] 

     AND IIF(Rate2.SpecialRules = 'NewRule', 
       Rate2.SpecialRules = 'NewRule', 
       Rate2.SpecialRules = "NA") 

ORDER BY Rate2.changedate DESC , rate2.SpecialRules ASC; 

сейчас это работает, но только когда rate2.specialrules - это ASC, а не DESC. может ли кто-нибудь сообщить, как ASC и DESC влияют на текстовые записи?

2

Если в вашем заказе установлено значение, имеющее БОЛЬШЕ, то один результат, то верхняя 1 строка имеет более одного (дата) значение, соответствующее этим критериям.

Таким образом, верхнее значение «1» может приводить к тому, что 200 строк являются верхним значением.

Таким образом, у вас есть более чем одна верхняя дата. Если вы вводите значение второго порядка, то снова те же правила, но теперь на основе двух столбцов. При заказе с помощью ASC, только одна строка имеет верхнее значение. Если вы заказываете DESC, то, очевидно, больше одной строки (date + SpeicalRules) существует с тем же значением.

Таким образом, изменение порядка может, безусловно, повлиять на количество строк, которые являются «первым» или первым в этом наборе данных.

Если speicalRules имеет повторяющиеся значения, а также имеет ту же дату, то, как указано в верхнем 1, можно создать более одной строки с одинаковыми значениями. Изменяя порядок, тогда только одна фактическая строка данных появляется вверху без повторяющихся значений.

Если вам все равно, и нужна ли только FIRST строка результатов EVEN, если существует несколько дат? Затем просто добавьте значение первичного ключа в сортировку.

Например:

ORDER BY Rate2.changedate DESC , Rate2.ID 

Это приведет к ЗАПРАШИВАЮТ порядке построчно и только одна строка будет возвращена, даже если многие даты одинаковы.

Вышеупомянутое вернет первое из множества одинаковых дат. Предполагая, что авто номер приращением, то последний самый верх дата те же даты можно было листать порядок сортировки ПК, как это:

ORDER BY Rate2.changedate DESC , Rate2.ID DESC 

Так верхний ряд чего-то основано на колоннах вами включить в предложение ORDER BY. Если строка повторяется, то верхняя часть 1 приведет к тому, что более одной строки будет больше 1 наибольшей.

Добавление столбца PK в ORDER таким образом гарантирует, что все строки, таким образом, уникальны для предложения TOP 1.Таким образом, TOP 1 просто управляется строками, включенными в предложение order by.

Смежные вопросы