powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Вопрос по SQLite
10 сообщений из 10, страница 1 из 1
Вопрос по SQLite
    #34699753
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая таблица:
Abonent;Organiz_abonenta;regn_abonenta;vrema_end;vrema_start;vrema_chist;razrid;MestoПетров В.В.;"ООО ""Спектр""";1;15:00:45;15:00:00;0:00:45;6;Иванов В.А.;"ООО ""Заря""";2;;15:00:30;;4;Сидоров;"ООО ""Интер""";3;15:00:30;15:01:00;0:00:30;0:00:00;

подскажите, какой запрос нужно написать, что бы получить следующее:

Nomer;Abonent;Organiz_abonenta;regn_abonenta;vrema_end;vrema_start;vrema_chist;razrid;Mesto1;Сидоров;"ООО ""Интер""";3;15:00:30;15:01:00;0:00:30;2;12;Петров В.В.;"ООО ""Спектр""";1;15:00:45;15:00:00;0:00:45;6;23;Иванов В.А.;"ООО ""Заря""";2;;15:00:30;;4;-
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34699760
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AbonentOrganiz_abonentaregn_abonentavrema_endvrema_startvrema_chistrazridMestoПетров В.В."ООО ""Спектр"""115:00:4515:00:000:00:456Иванов В.А."ООО ""Заря"""215:00:304Сидоров"ООО ""Интер"""315:00:3015:01:000:00:300:00:00

нужно получить такое:

NomerAbonentOrganiz_abonentaregn_abonentavrema_endvrema_startvrema_chistrazridMesto1Сидоров"ООО ""Интер"""315:00:3015:01:000:00:30212Петров В.В."ООО ""Спектр"""115:00:4515:00:000:00:45623Иванов В.А."ООО ""Заря"""215:00:304-
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34699875
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно, что именно тебе нужно.
Получить нужный порядок? Или сделать столбец-нумератор, нумерующий записи в итоговом наборе данных в соответствие с этим порядком?
В целом, столбец нумератор получают одним из следующих способов:
1) Коррелированный запрос в SELECT-листе
2) SELF-JOIN таблицы по неэквиусловию.
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34699883
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейНе совсем понятно, что именно тебе нужно.
Получить нужный порядок? Или сделать столбец-нумератор, нумерующий записи в итоговом наборе данных в соответствие с этим порядком?
В целом, столбец нумератор получают одним из следующих способов:
1) Коррелированный запрос в SELECT-листе
2) SELF-JOIN таблицы по неэквиусловию.
На твоих тестовых данных:


1) Коррелированный подзапрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
-- Вариант №1 (коррелированный подзапрос):
select (
         select count( 1 )
           from tbl t1
          where coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
            and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
                or 
                t1.abonent <= t0.abonent
            and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
       ) as nomer,
       abonent, organiz_abonenta, regn_abonenta, 
       vrema_start, vrema_end, vrema_chist, razrid,
       case 
         when vrema_chist is null then null
         else (
                select count( 1 )
                  from tbl t1
                 where coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
                   and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
                       or 
                       t1.abonent <= t0.abonent
                   and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
              )
       end as mesto
  from tbl t0
order by nomer

Query finished, retrieving results...

NOMER     ABONENT     ORGANIZ_ABONENTA   REGN_ABONENTA   VREMA_START   VREMA_END   VREMA_CHIST   RAZRID   MESTO
-----   -----------   ----------------   -------------   -----------   ---------   -----------   ------   -----
     1    Сидоров       "ООО ""Интер"""                 3        15 : 01 : 00      15 : 00 : 30         0 : 00 : 30          2         1 
     2    Петров В.В.   "ООО ""Спектр"""                1        15 : 00 : 00      15 : 00 : 45         0 : 00 : 45          6         2 
     3    Иванов В.А.   "ООО ""Заря"""                  2        15 : 00 : 30                                    4 

 3  row(s) retrieved

2) SELF-JOIN:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-- Вариант №2 (SELF-JOIN таблицы):
select count( 1 ) as nomer,
       t0.abonent, t0.organiz_abonenta, t0.regn_abonenta, 
       t0.vrema_start, t0.vrema_end, t0.vrema_chist, t0.razrid,
       case
         when t0.vrema_chist is null then null
         else count( 1 )
       end as mesto
  from tbl t0
  join tbl t1
    on (
         coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
     and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
         or 
         t1.abonent <= t0.abonent
     and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
       ) 
 group by t0.abonent, t0.organiz_abonenta, t0.regn_abonenta, 
       t0.vrema_start, t0.vrema_end, t0.vrema_chist, t0.razrid
 order by nomer

Query finished, retrieving results...

NOMER     ABONENT     ORGANIZ_ABONENTA   REGN_ABONENTA   VREMA_START   VREMA_END   VREMA_CHIST   RAZRID   MESTO
-----   -----------   ----------------   -------------   -----------   ---------   -----------   ------   -----
     1    Сидоров       "ООО ""Интер"""                 3        15 : 01 : 00      15 : 00 : 30         0 : 00 : 30          2         1 
     2    Петров В.В.   "ООО ""Спектр"""                1        15 : 00 : 00      15 : 00 : 45         0 : 00 : 45          6         2 
     3    Иванов В.А.   "ООО ""Заря"""                  2        15 : 00 : 30                                    4 

 3  row(s) retrieved
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34702762
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев Сергей Бабичев СергейНе совсем понятно, что именно тебе нужно.
Получить нужный порядок? Или сделать столбец-нумератор, нумерующий записи в итоговом наборе данных в соответствие с этим порядком?
В целом, столбец нумератор получают одним из следующих способов:
1) Коррелированный запрос в SELECT-листе
2) SELF-JOIN таблицы по неэквиусловию.
На твоих тестовых данных:


1) Коррелированный подзапрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
-- Вариант №1 (коррелированный подзапрос):
select (
         select count( 1 )
           from tbl t1
          where coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
            and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
                or 
                t1.abonent <= t0.abonent
            and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
       ) as nomer,
       abonent, organiz_abonenta, regn_abonenta, 
       vrema_start, vrema_end, vrema_chist, razrid,
       case 
         when vrema_chist is null then null
         else (
                select count( 1 )
                  from tbl t1
                 where coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
                   and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
                       or 
                       t1.abonent <= t0.abonent
                   and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
              )
       end as mesto
  from tbl t0
order by nomer

Query finished, retrieving results...

NOMER     ABONENT     ORGANIZ_ABONENTA   REGN_ABONENTA   VREMA_START   VREMA_END   VREMA_CHIST   RAZRID   MESTO
-----   -----------   ----------------   -------------   -----------   ---------   -----------   ------   -----
     1    Сидоров       "ООО ""Интер"""                 3        15 : 01 : 00      15 : 00 : 30         0 : 00 : 30          2         1 
     2    Петров В.В.   "ООО ""Спектр"""                1        15 : 00 : 00      15 : 00 : 45         0 : 00 : 45          6         2 
     3    Иванов В.А.   "ООО ""Заря"""                  2        15 : 00 : 30                                    4 

 3  row(s) retrieved

2) SELF-JOIN:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-- Вариант №2 (SELF-JOIN таблицы):
select count( 1 ) as nomer,
       t0.abonent, t0.organiz_abonenta, t0.regn_abonenta, 
       t0.vrema_start, t0.vrema_end, t0.vrema_chist, t0.razrid,
       case
         when t0.vrema_chist is null then null
         else count( 1 )
       end as mesto
  from tbl t0
  join tbl t1
    on (
         coalesce(t1.vrema_chist,'9:99:99') < coalesce(t0.vrema_chist,'9:99:99')
     and coalesce(t1.vrema_chist,'9:99:99') != coalesce(t0.vrema_chist,'9:99:99')
         or 
         t1.abonent <= t0.abonent
     and coalesce(t1.vrema_chist,'9:99:99') = coalesce(t0.vrema_chist,'9:99:99')
       ) 
 group by t0.abonent, t0.organiz_abonenta, t0.regn_abonenta, 
       t0.vrema_start, t0.vrema_end, t0.vrema_chist, t0.razrid
 order by nomer

Query finished, retrieving results...

NOMER     ABONENT     ORGANIZ_ABONENTA   REGN_ABONENTA   VREMA_START   VREMA_END   VREMA_CHIST   RAZRID   MESTO
-----   -----------   ----------------   -------------   -----------   ---------   -----------   ------   -----
     1    Сидоров       "ООО ""Интер"""                 3        15 : 01 : 00      15 : 00 : 30         0 : 00 : 30          2         1 
     2    Петров В.В.   "ООО ""Спектр"""                1        15 : 00 : 00      15 : 00 : 45         0 : 00 : 45          6         2 
     3    Иванов В.А.   "ООО ""Заря"""                  2        15 : 00 : 30                                    4 

 3  row(s) retrieved


Не получается как описано. Таблица получается такая:

nomerAbonentOrganiz_abonentaregn_abonentavrema_startvrema_endvrema_chistrazridmesto1Иванов В.А."ООО ""Заря"""215:00:30412Петров В.В."""ООО """"Спектр"""115:00:0015:00:450:00:45623Сидоров C.C."ООО ""Интер"""315:01:0015:02:000:01:0033
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34702913
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведи полное описание полей таблицы с указанием их типа.
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34702989
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабичев СергейПриведи полное описание полей таблицы с указанием их типа.Если что, то интерес вызывает поле vrema_chist. Я предполагал, что оно имеет символьный тип (VARCHAR / CHAR). Если это тип TIME, то нужно немного подкорректировать значение по умолчанию в функции COALESCE. Вместо строковой константы '9:99:99' нужно подставить такое значение, которое является максимально допустимым для типа TIME.

Как вариант - придумать другой способ сравнения NULL-значения в поле vrema_chist с не NULL-значением. Причем таким образом, чтобы записи с vrema_chist IS NULL получались с бОльшими номерами, чем записи с непустым значением в этом поле
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34705311
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бабичев СергейПриведи полное описание полей таблицы с указанием их типа.

Таблица sorev вот такая:


CREATE TABLE sorev (Abonent VARCHAR(40) NULL,Organiz_abonenta VARCHAR(50) NULL,regn_abonenta VARCHAR(4) NULL,vrema_start TIME NULL,vrema_end TIME NULL,vrema_chist TIME NULL,razrid VARCHAR(3) NULL);

INSERT INTO sorev (Abonent,Organiz_abonenta,regn_abonenta,vrema_start,vrema_end,vrema_chist,razrid) VALUES ('Петров В.В.','ООО "Спектр"','1','15:00:00','15:00:45','00:00:45','4');

INSERT INTO sorev (Abonent,Organiz_abonenta,regn_abonenta,vrema_start,vrema_end,vrema_chist,razrid) VALUES ('Иванов В.А.','ООО "Заря"','2','15:00:30','','','2');

INSERT INTO sorev
(Abonent,Organiz_abonenta,regn_abonenta,vrema_start,vrema_end,vrema_chist,razrid) VALUES ('Сидоров С.С.','ООО "Интер"','3','15:01:00','15:01:30','00:00:30','2');

Нужно отсортировать по колонке vrema_chist при этом NULL должны быть в конце таблицы и добавить при выводе колонки Nomer и Mesto, при этом в коленке Mesto где строка
vrema_chist = NULL не должны быть пронумерованы.

Вот пример:

NomerAbonentOrganiz_abonentaregn_abonentavrema_startvrema_endvrema_chistrazridMesto1Сидоров С.С.ООО "Интер"315:01:0015:01:3000:00:30212Петров В.В.ООО "Спектр"115:00:0015:00:4500:00:45423Иванов В.А.ООО "Заря"215:00:302
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34708029
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добился того, что бы сортировка была по vrema_chist , с сортировкой в конце vrema_chist = null

select * from sorev order by case when vrema_chist = '' then 1 else 0 end, vrema_chist
...
Рейтинг: 0 / 0
Вопрос по SQLite
    #34712563
SQLchainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь сможет мне помочь?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Вопрос по SQLite
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]