powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / С нескольких строк в одну
15 сообщений из 15, страница 1 из 1
С нескольких строк в одну
    #40122959
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток форумчане,
Есть вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 select t1.SUM_FREE_DAYS, ud1.PARENT_USER_ID as USER_ID, ud1.FULL_NAME,
  (case when t1.FREEZE_DAYS_VOCATION = 1 then 'Заморожено' else '' end) as FREEZE_DAYS
    from USERS_DATA ud1
      right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS, max(t.USER_ID) as USER_ID, max(t.PARENT_USER_ID) as PARENT_USER_ID, t.FREEZE_DAYS_VOCATION
                    from (select min(uv.REMAINDER_DAYS) as MIN_FREE_DAY, max(ud.ID) as USER_ID, ud.PARENT_USER_ID, uv.FREEZE_DAYS_VOCATION, ud.ARCHIVE
                            from USERS_VOCATION uv
                              left join USERS_DATA ud on ud.PARENT_USER_ID = uv.PARENT_USER_ID and ud.ARCHIVE = 1
                            where uv.TYPE_RECORD in (0, 1) and uv.PERIOD_LAST_DAY = 1
                              group by uv.PERIOD_FROM, uv.PERIOD_TO, ud.ID, ud.PARENT_USER_ID, ud.FULL_NAME, ud.ARCHIVE, uv.FREEZE_DAYS_VOCATION) t
  group by t.FREEZE_DAYS_VOCATION) t1 on t1.USER_ID = ud1.ID



он выдает результат (см. картинку),
можно ли этот результат чуть переделать/подогнать к результату (см.картинку)?

Заранее спасибо за ответ
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40122966
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя можно этот запрос размножить на два запроса по разнному критерию о потом объединить заново.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select res1.*, res2.SUM_FREE_DAYS as SUM_FREEZE_DAYS
  from
 (select t1.SUM_FREE_DAYS, ud1.PARENT_USER_ID as USER_ID, ud1.FULL_NAME, t1.FREEZE_DAYS_VOCATION as FREEZE_DAYS
    from USERS_DATA ud1
      right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS, max(t.USER_ID) as USER_ID, max(t.PARENT_USER_ID) as PARENT_USER_ID, t.FREEZE_DAYS_VOCATION
                    from (select min(uv.REMAINDER_DAYS) as MIN_FREE_DAY, max(ud.ID) as USER_ID, ud.PARENT_USER_ID, uv.FREEZE_DAYS_VOCATION, ud.ARCHIVE
                            from USERS_VOCATION uv
                              left join USERS_DATA ud on ud.PARENT_USER_ID = uv.PARENT_USER_ID and ud.ARCHIVE = 1
                            where uv.TYPE_RECORD in (0, 1) and uv.PERIOD_LAST_DAY = 1
                              group by uv.PERIOD_FROM, uv.PERIOD_TO, ud.ID, ud.PARENT_USER_ID, ud.FULL_NAME, ud.ARCHIVE, uv.FREEZE_DAYS_VOCATION) t
  where t.FREEZE_DAYS_VOCATION = 0
  group by t.FREEZE_DAYS_VOCATION) t1 on t1.USER_ID = ud1.ID) res1

  left join
 (select t1.SUM_FREE_DAYS, ud1.PARENT_USER_ID as USER_ID, ud1.FULL_NAME, t1.FREEZE_DAYS_VOCATION as FREEZE_DAYS
    from USERS_DATA ud1
      right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS, max(t.USER_ID) as USER_ID, max(t.PARENT_USER_ID) as PARENT_USER_ID, t.FREEZE_DAYS_VOCATION
                    from (select min(uv.REMAINDER_DAYS) as MIN_FREE_DAY, max(ud.ID) as USER_ID, ud.PARENT_USER_ID, uv.FREEZE_DAYS_VOCATION, ud.ARCHIVE
                            from USERS_VOCATION uv
                              left join USERS_DATA ud on ud.PARENT_USER_ID = uv.PARENT_USER_ID and ud.ARCHIVE = 1
                            where uv.TYPE_RECORD in (0, 1) and uv.PERIOD_LAST_DAY = 1
                              group by uv.PERIOD_FROM, uv.PERIOD_TO, ud.ID, ud.PARENT_USER_ID, ud.FULL_NAME, ud.ARCHIVE, uv.FREEZE_DAYS_VOCATION) t
  where t.FREEZE_DAYS_VOCATION = 1
  group by t.FREEZE_DAYS_VOCATION) t1 on t1.USER_ID = ud1.ID) res2 on res1.USER_ID = res2.USER_ID


ну насколько это будет правильно.
Хотя пока работает
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40122976
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, такие вопросы надо задавать с DDL и DML.
Во-вторых, пример надо упрощать, ибо мало кто будет
заморачиваться и вникать в запрос, содержащий
right join group by select left join group by

Попахивает, знаете ли.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40122982
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010,

эту простынь прочитать непросто. Да и пример частный. Опишите задачу в общих словах.
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123014
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI
Kos-2010,

эту простынь прочитать непросто. Да и пример частный. Опишите задачу в общих словах.


Есть view, которая просто собирает окончательные результаты в виде таблицы с:
- свободными днями отпуска по сотрудникам (см. запрос в первом сообщении)
- общим числом уже отгуляных дней этими сотрудниками (см. запрос в первом сообщении)
в результате появлялись как правило две строки для одного и того же сотрудника, но с свободными днями и общим числом (см. картинку), что в общем-то тоже приемлемо.

но как-то пользователю смотреть данные не очень привлекательно. Я решил привести: одна фамилия - одна строка
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123026
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем у тебя пользователь смотрит на сырые данные из SQL запроса? Ты его,
поди, ещё заставляешь в isql это делать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123043
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010,

сначала мы выбираем разные записи
Код: sql
1.
case when t1.FREEZE_DAYS_VOCATION = 1 then 'Заморожено' else '' end


а потом говорим, что else нам не надо. Диссонанс какой-то, если не сказать больше.

p.s. отпуск - vAcation, а не vOcation. СтыдобА.
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123048
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010
Доброе время суток форумчане,
Есть вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 select t1.SUM_FREE_DAYS, ud1.PARENT_USER_ID as USER_ID, ud1.FULL_NAME,
  (case when t1.FREEZE_DAYS_VOCATION = 1 then 'Заморожено' else '' end) as FREEZE_DAYS
    from USERS_DATA ud1
      right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS, max(t.USER_ID) as USER_ID, max(t.PARENT_USER_ID) as PARENT_USER_ID, t.FREEZE_DAYS_VOCATION
                    from (select min(uv.REMAINDER_DAYS) as MIN_FREE_DAY, max(ud.ID) as USER_ID, ud.PARENT_USER_ID, uv.FREEZE_DAYS_VOCATION, ud.ARCHIVE
                            from USERS_VOCATION uv
                              left join USERS_DATA ud on ud.PARENT_USER_ID = uv.PARENT_USER_ID and ud.ARCHIVE = 1
                            where uv.TYPE_RECORD in (0, 1) and uv.PERIOD_LAST_DAY = 1
                              group by uv.PERIOD_FROM, uv.PERIOD_TO, ud.ID, ud.PARENT_USER_ID, ud.FULL_NAME, ud.ARCHIVE, uv.FREEZE_DAYS_VOCATION) t
  group by t.FREEZE_DAYS_VOCATION) t1 on t1.USER_ID = ud1.ID




он выдает результат (см. картинку),
можно ли этот результат чуть переделать/подогнать к результату (см.картинку)?

Заранее спасибо за ответ



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select  sum(case when Z.FREEZE_DAYS<>'Заморожено' then Z.SUM_FREE_DAYS )end,Z.USER_ID,Z.FULL_NAME,sum( case when Z.FREEZE_DAYS='Заморожено' then Z.SUM_FREE_DAYS end)
from(
 select t1.SUM_FREE_DAYS, ud1.PARENT_USER_ID as USER_ID, ud1.FULL_NAME,
  (case when t1.FREEZE_DAYS_VOCATION = 1 then 'Заморожено' else '' end) as FREEZE_DAYS
    from USERS_DATA ud1
      right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS, max(t.USER_ID) as USER_ID, max(t.PARENT_USER_ID) as PARENT_USER_ID, t.FREEZE_DAYS_VOCATION
                    from (select min(uv.REMAINDER_DAYS) as MIN_FREE_DAY, max(ud.ID) as USER_ID, ud.PARENT_USER_ID, uv.FREEZE_DAYS_VOCATION, ud.ARCHIVE
                            from USERS_VOCATION uv
                              left join USERS_DATA ud on ud.PARENT_USER_ID = uv.PARENT_USER_ID and ud.ARCHIVE = 1
                            where uv.TYPE_RECORD in (0, 1) and uv.PERIOD_LAST_DAY = 1
                              group by uv.PERIOD_FROM, uv.PERIOD_TO, ud.ID, ud.PARENT_USER_ID, ud.FULL_NAME, ud.ARCHIVE, uv.FREEZE_DAYS_VOCATION) t
  group by t.FREEZE_DAYS_VOCATION) t1 on t1.USER_ID = ud1.ID
)Z
group by Z.USER_ID,Z.FULL_NAME


Ну как-то так, если правильно понял
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123132
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Kos-2010,

сначала мы выбираем разные записи
Код: sql
1.
case when t1.FREEZE_DAYS_VOCATION = 1 then 'Заморожено' else '' end


а потом говорим, что else нам не надо. Диссонанс какой-то, если не сказать больше.

ни какого диссонанса, мне просто нужно показать, что есть у сотрудника разные типы дней, так сказать "замороженные" (это когда деньги выплачиваются за отпуск уже по увольнению), и если таких типов дней у сотрудника нет
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123134
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

спасибо я подумаю на вашим предложением варианта запроса
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123294
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
p.s. отпуск - vAcation, а не vOcation. СтыдобА.

СтыдОба)
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123316
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уел. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123420
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда-то не туда посты улетели...
Странно, видимо, баг с переносом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123422
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

А ты через как ответ постил? Я полтора часа назад перенёс.
...
Рейтинг: 0 / 0
С нескольких строк в одну
    #40123423
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно, через NNTP, "ответить".
Видимо, ветка выбирается "старая",
до переноса.

Ладно, фиг с ним.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / С нескольких строк в одну
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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