|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Serg Vasiltsoff 2:5020/400 13 Apr 2001 21:58:08 To : All Subject : Re: Помогите с SQL -------------------------------------------------------------------------------- > > F> Select Tabel, sum(summa) as TabSum > > F> from Personal p left outer join Salary s > > F> on p.Tabel = s.Tabel > > F> group by Tabel > > F> Hадо вывести только те значения которые > > F> TabSum=0 sum( isnull( summa,. 0)) as TabSum а то left outer join даст в summa NULL и суммирование даст NULL ;) > > Select Tabel, sum(summa) as TabSum > > from Personal p left outer join Salary s > > on p.Tabel = s.Tabel > > group by Tabel > > having sum(summa)=0 > > Все работает, но как раз то, что мне нужно не делает. > Мне нужно, что бы он вывел все sum(Summa) = 0, > а результат запроса ноль строк. А результаты быть должны? А то может так оно и надо ;) И зачем left outer join? Или надо обязательно все Personal вывести? Да, и может ли summa быть меньше нуля? А ноль? Если нет, то ..... Может переписать через exists ? Типа where not exists()? А то зачем суммировать и напрягать сервер агрегатами, если надо всего - навсего выбрать тех, для которых нет записей в связанных таблицах? Заодно и проблема с NULL / NOT NULL в агрегатах автоматом нимется как дурацкая ;) То есть если в Salary сумма может быть только > 0 (что логично) то запрос трансформируется в select [distinct] Tabel from Personal where Tabel not in ( select Tabel from Salary ) ну и т.д. --- ifmail v.2.15dev5 * Origin: Lime Systems (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/120059b02bcb1.html, оценка из 5, голосов 10
|