• Объединение. Как правильно оформить таблицу?

    @Ngswolf Автор вопроса
    В общем у меня получилось вот что:
    select 'Юридические лица'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all
    select 'Кредитные договоры на овердрафты,на транши овердрафтов,договоры на кредитные линии,договоры на транши'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all
    select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where  -- [ЮР. ЛИЦА]
           --кредитные договоры на овердрафты,на транши овердрафтов,договоры на кредитные линии,договоры на транши
          (substr(c_NUM,1,3) in ('441', '442', '443', '444', '445', '446', '447', '448', '449', '450', '451', '452', '443', '454', '456') and substr(c_NUM,1,5)<>'4__15%')
           or
          (substr(c_NUM,1,3) in ('460', '461', '462', '463', '464', '465', '466', '467', '468', '469', '470', '471', '472', '473')  and substr(c_NUM,1,5)<>'4__08%') 
    group by C_NUM, c_NAME
    union all          
    select 'Депозитные (срочные) договоры'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all      -- депозитные (срочные) договоры 
    select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where    
           substr(c_NUM,1,3) in ('410', '411', '412', '413', '414', '415', '416', '417', '418', '419', '420', '421', '422', '425', '427', '428', '429', '430', '431', '432', '433', '434', '435', '436', '437', '438', '439', '440')
    group by (c_NUM, c_NAME)
    union all
    select 'Договоры РКО, договоры пластиковых карт юридических лиц по каждому виду валют'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all       --договоры РКО, договоры пластиковых карт юридических лиц по каждому виду валют
    select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where  
            substr(c_NUM,1,3) in ('401', '402', '403', '404', '405', '406', '407') 
            or substr(c_NUM,1,5) in ('40802', '40804', '40805', '40806', '40807', '40809', '40811', '40812', '40814', '40815', '40818', '40819', '40821', '40901', '40902', '40903', '40907', '40908', '47401', '47402', '47409', '47410')
    group by (c_NUM, c_NAME)
    union all
    select 'Физические лица'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all
    select 'Кредитные договоры на овердрафты,договоры на транши овердрафтов,договоры на кредитные линии,договоры на транши'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all
    select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where       -- [ФИЗ.ЛИЦА]
           --кредитные договоры на овердрафты,договоры на транши овердрафтов,договоры на кредитные линии,договоры на транши
            substr(c_NUM,1,3) in ('455', '457') and substr(c_NUM,1,5)<>'4__15'
    group by (c_NUM, c_NAME)
    union all
    select 'Депозитные договоры'  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all       --депозитные договоры  
     select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where      
           substr(c_NUM,1,3) in ('423', '426')
    group by (c_NUM, c_NAME)
    
    union all
    select 'Счета физических лиц '  Балансовый_счет, null Наименование, null   Количество_лицевых_счетов
    from  z#PL_US 
    where rownum < 2
    union all       --Счета физических лиц 
     select c_NUM  Балансовый_счет, c_NAME Наименование, count(c_NAME)  Количество_лицевых_счетов
    from z#PL_US 
    where        
           substr(c_NUM,1,5) in ('40803', '40810', '40813', '40817', '40820')
    group by (c_NUM, c_NAME)
    union all
    select null Балансовый_счет, 'Итого лицевых счетов:' Наименование, count(c_NAME)
    from  z#PL_US 
    where  -- [ЮР. ЛИЦА]
           --кредитные договоры на овердрафты,на транши овердрафтов,договоры на кредитные линии,договоры на транши
          substr(c_NUM,1,3) in ('441', '442', '443', '444', '445', '446', '447', '448', '449', '450', '451', '452', '443', '454', '456') and substr(c_NUM,1,5)<>'4__15'
           or
           ( substr(c_NUM,1,3) in ('460', '461', '462', '463', '464', '465', '466', '467', '468', '469', '470', '471', '472', '473')  and  substr(c_NUM,1,5)<>'4__08')  
          -- депозитные (срочные) договоры 
           or
           substr(c_NUM,1,3) in ('410', '411', '412', '413', '414', '415', '416', '417', '418', '419', '420', '421', '422', '425', '427', '428', '429', '430', '431', '432', '433', '434', '435', '436', '437', '438', '439', '440')
           --договоры РКО, договоры пластиковых карт юридических лиц по каждому виду валют
           or 
            substr(c_NUM,1,3) in ('401', '402', '403', '404', '405', '406', '407') 
            or substr(c_NUM,1,5) in ('40802', '40804', '40805', '40806', '40807', '40809', '40811', '40812', '40814', '40815', '40818', '40819', '40821', '40901', '40902', '40903', '40907', '40908', '47401', '47402', '47409', '47410')
            -- [ФИЗ.ЛИЦА]
           --кредитные договоры на овердрафты,договоры на транши овердрафтов,договоры на кредитные линии,договоры на транши
           or
            substr(c_NUM,1,3) in ('455', '457') and substr(c_NUM,1,5)<>'4__15'
           --депозитные договоры  
           or
           substr(c_NUM,1,3) in ('423', '426')
           --Счета физических лиц 
           or 
           substr(c_NUM,1,5) in ('40803', '40810', '40813', '40817', '40820')

    Заказчик очень хотел, чтобы были названия каждых пунктов, а тут без union-ов никак
    Ответ написан
    Комментировать