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

Откуда:
Сообщений: 90
Добрый день. Хотелось бы понять почему рубит все top 1 в прилагаемом select1...
1. select1 полный нужный рабочий скрипт на вытягивание нужных данных.В строке 79 написал в чем трабле
2. select2 - результат работы пункта 1., за минусом сабселекта in_akt в котором проблема
3. select3 - результат работы отдельно сабселекта in_akt в котором проблема.
4. rezult1, rezult2,rezult3 Результаты отработки п.1,2,3 соотвественно

Не могу понять почему когда используешь в данном случае такую конструкцию, то при таких возвращаемых данных,разобранных select-ов, не работает с top1 в основном select1

К сообщению приложен файл (select.sql - 12Kb) cкачать
7 ноя 11, 18:36    [11560051]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bormental
3. select3 - результат работы отдельно сабселекта in_akt в котором проблема.
Очевидная же ошибка.

Вы когда делаете запрос select3 отдельно, вы ставите условия sps.f$cparty=0x8001000000000512

Если вы поставите в подзапросе такое же условие, то всё будет работать и с TOP 1 (но только с этой записью)

Но в подзапросе-то этого условия нет. Там выбирается куча записей, из них берётся произвольная одна запись, и потом снаружи на неё накладывается условие t2.f$cparty=in_akt.f$cparty

Естественно, маловероятно, что бы эта выбранная одна запись оказалась 0x8001000000000512
7 ноя 11, 18:49    [11560112]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
bormental
Member

Откуда:
Сообщений: 90
Черт, понял...то есть в скуле при таком приеме использования вложенного запроса ограничения накладываемые

) in_akt ON t2.f$cparty=in_akt.f$cparty and in_akt.f$cmcusl=t2.f$cmc

будут проверяться только для выбранной первой записи сабселекта..а выберется первая встречная запись по условиям внутри сабселекта. Никак не прогнуть это дело во всей этой конструкции ? В одной дате по условию сабселекта может просто быть не одна запись (поэтому и сделан group by там + min(sps.f$dsopr)) и выбрать бы первую только ((
7 ноя 11, 19:01    [11560160]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bormental
Никак не прогнуть это дело во всей этой конструкции ?
А это зависит от версии сиквела.

В новых версиях появился CROSS APPLY.
7 ноя 11, 19:03    [11560166]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
bormental
Member

Откуда:
Сообщений: 90
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

актуально это в свете этой конфигурации ?
7 ноя 11, 19:09    [11560200]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
bormental
Member

Откуда:
Сообщений: 90
понял что актуально. спасибо )
7 ноя 11, 19:20    [11560247]     Ответить | Цитировать Сообщить модератору
 Re: странность TOP1  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bormental
понял что актуально. спасибо )
Да, CROSS APPLY в 2005 уже появился.
7 ноя 11, 20:27    [11560470]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить