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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2021, 15:00   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию С нескольких строк в одну

Доброе время суток форумчане,
Есть вот такой запрос:
Код:
 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

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

Заранее спасибо за ответ
Изображения
Тип файла: png запрос.png (8.2 Кб, 17 просмотров)
KBO вне форума Ответить с цитированием
Старый 25.12.2021, 16:50   #2
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

хотя можно этот запрос размножить на два запроса по разнному критерию о потом объединить заново.
Код:
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
ну насколько это будет правильно.
Хотя пока работает
KBO вне форума Ответить с цитированием
Старый 25.12.2021, 18:45   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

вывести надо вот эту сумму?
Цитата:
Код:
right join (select sum(MIN_FREE_DAY) as SUM_FREE_DAYS,
Код:
select ...., t1.SUM_FREE_DAYS ....
Код:
select ...., case t1.FREE_VOCATION>0 then SUM_FREE_DAYS else ... end
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.12.2021, 21:33   #4
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Та дело не совсем в сумме,
просто результат (см. рис). представленный в виде двух строк, на одну фамилию (FULL_NAME), нужно было представить в виде одной строки, а не двух
KBO вне форума Ответить с цитированием
Старый 26.12.2021, 13:41   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

и каким образом ?
1. добавить еще несколько колонок ?
-- берем данные первого запроса
Код:
select ...
from ...
join ...  --
и ДОБАВЛЯЕМ к ним данные второго запроса
join ( select ...
) second on second.... = .... -- правило соответствия (FULL_NAME )
не забываем добавить в результат(первый select) нужные колонки
Код:
select ..., second.....
или так
Код:
select first....., second....
from ( -- первый запрос c full_name
         select ... as full_name, ....
      ) first
join ( -- второй запрос и тоже с full_name
        select ... as full_name, ... 
     ) second on first.full_name =second.full_name
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текст из нескольких ячеек в одну Tirendus Microsoft Office Excel 10 20.01.2016 16:45
Объединение нескольких строк в одну knzhukov Microsoft Office Access 4 06.06.2011 07:52
Из нескольких ячеек в одну (слияние) kzld Microsoft Office Excel 4 06.10.2010 10:29
Объединение нескольких БД в одну БД GhostBZ БД в Delphi 4 01.09.2009 09:00
Сведение нескольких таблиц в одну Sega Microsoft Office Excel 3 05.08.2008 15:21