Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2014, 13:16   #1
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию Сортировка с помощью SQL в Firebird2.5

Всем доброго времени суток. Возникла очередная задача:
Вывести количество ремонтных заявок выполненных в каждом месяце. Ответ предоставить в формате Месяц - Количество выполненных заявок. Для невыполненных заявок вместо месяца вывести NULL VALUE. Отсортироввать данные по месяцам.
Написал следующий sql-запрос
Код:
select
(case
    when Executed = 1 then Extract(month from ExecutionDate) //получим месяц из полной даты
    else 'NULLS VALUES'
end) as ExecutionMonth,
count(*) as Summa from request group by ExecutionMonth order by ExecutionMonth nulls last;
Но проблема в том, что не сортируется из-за присутствия строки NULL VALUES. Если заменить его на любое число то сортировка происходит нормально.
Так вот вопрос как можно отсортировать не учитывая это NULL VALUE.

Должно получиться что то вроде
Изображения
Тип файла: jpg 1.jpg (27.0 Кб, 116 просмотров)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 01.07.2014, 13:33   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

те которые Executed <> 1 нужны в результате? если нет, то во where Executed = 1.

ADD

Посмотрел на картинку.
Судя по ней можно 13 присвоить, а в отображении клиентское калькулируемое поле
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.07.2014, 13:36   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

скрестить ужа с ежом не получается?
eval вне форума Ответить с цитированием
Старый 01.07.2014, 13:37   #4
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Нужно сортировать на одном уровне с подменой значения:
Код:
select
  case when ExecutionMonth is null then 'NULL VALUES' else ExecutionMonth end, Summa
-- nvl(ExecutionMonth, 'NULL VALUES'), Summa -- для Oracle
from (
  select
    ExecutionMonth, count(*) Summa
  from (
    select
      case when Executed = 1 then Extract(month from ExecutionDate) end ExecutionMonth,
      a.*
    from
      request a
  )
  group by
    ExecutionMonth
)
order by
  ExecutionMonth nulls last;
В разработке: воспроизводственный контур ИТ

Последний раз редактировалось Vapaamies; 01.07.2014 в 13:41.
Vapaamies вне форума Ответить с цитированием
Старый 01.07.2014, 13:40   #5
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Те, у которых Executed <> 1, нужны в результате. Если Executed <> 1 то нужно вывести NULL VALUE (последняя строчка на картинке). В этом вся и проблема. Firebird не понимает что такое это NULL VALUE и не сортирует.

To eval. Да именно это и не получается, а надо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 01.07.2014, 13:50   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно так еще
Код:
select
(case
    when Executed = 1 then CAST(Extract(month from ExecutionDate) AS VARChAR(2)) //получим месяц из полной даты
    else 'NULLS VALUES'
end) as ExecutionMonth,
(case
    when Executed = 1 then Extract(month from ExecutionDate) //получим месяц из полной даты
    else 13
end) as ExecutionMonth1,
count(*) as Summa from request group by ExecutionMonth order by ExecutionMonth1
ExecutionMonth1 не отображать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.07.2014 в 13:53.
Аватар вне форума Ответить с цитированием
Старый 01.07.2014, 13:57   #7
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Мой запрос должен быть рабочим, я его исправил после поста.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 01.07.2014, 13:57   #8
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Vapaamiesспасибо воспользовался Вашим советом.

Аватар, ошибку пишет Firebird.
Цитата:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 01.07.2014, 14:28   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так
Код:
SELECT case when U.Month1=13
         then 'NULLS VALUES'
         else CAST(U.Month1 AS VARChAR(2)) end as ExecutionMonth,
    U.Summa
  FROM
    (SELECT case when Executed = 1
              then Extract(month from ExecutionDate)
              else 13 end as Month1,
          count(*) as Summa
       FROM request
       group by Month1) U
  ORDER BY U.Month1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.07.2014, 14:41   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Аватар а без подзапроса никак?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запросы в FireBird2.5 GetMax Помощь студентам 15 30.06.2014 21:52
Запись в БД с помощью SQL Анка_К БД в Delphi 4 30.09.2013 12:13
Сортировка с помощью VBA Lyubov1990 Microsoft Office Excel 11 22.11.2011 20:06
подключение firebird2.1+delphy2009 Lokos БД в Delphi 29 14.04.2010 11:08
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15