with a as (
select 'a' as fio, '116-935-936 86' as inn
from dual connect by level < 4
union all
select 'b' as fio, '046-944-605 86' as inn
from dual connect by level < 4
union all
select 'c' as fio, '046-947-949 18' as inn
from dual connect by level < 4
)
select * from a
Надо:
1. Сгруппировать по фио и инн.
2. После каждой такой группы вывести пустую строчку.
Здравствуйте, Funny Rabbit, Вы писали:
FR>Надо: FR>1. Сгруппировать по фио и инн. FR>2. После каждой такой группы вывести пустую строчку.
FR>Помогите. 3 дня голову ломаю
А как это должно выглядеть, т.е. не совсем понятно, что есть пустая строка после каждой группы ?
Здравствуйте, Olaf, Вы писали:
O>Здравствуйте, Funny Rabbit, Вы писали:
FR>>Надо: FR>>1. Сгруппировать по фио и инн. FR>>2. После каждой такой группы вывести пустую строчку.
FR>>Помогите. 3 дня голову ломаю
O>А как это должно выглядеть, т.е. не совсем понятно, что есть пустая строка после каждой группы ?
O>Только предполагаю. Так ? O>Image: EmptyRow.png
Да. Извиняюсь за упущения. Это мой косяк. Выглядеть должно именно так.
Здравствуйте, Funny Rabbit, Вы писали:
FR>Да. Извиняюсь за упущения. Это мой косяк. Выглядеть должно именно так.
Как один из вариантов:
with a as (
select 'a' as fio, '116-935-936 86' as inn
from dual connect by level < 4
union all
select 'b' as fio, '046-944-605 86' as inn
from dual connect by level < 4
union all
select 'c' as fio, '046-947-949 18' as inn
from dual connect by level < 4
)
select case when b.Type = 1 then a.fio else b.Empty end as fio
,case when b.Type = 1 then a.inn else b.Empty end as inn
from
(
select fio, inn
from a
group by fio, inn
) a
cross join (select 1 as Type, null as Empty from dual union all select 2, 'пустая строка' from dual) b
order by a.fio, a.inn, b.Type
Здравствуйте, Olaf, Вы писали:
O>Как один из вариантов: O>
O>with a as (
O>select 'a' as fio, '116-935-936 86' as inn
O>from dual connect by level < 4
O>union all
O>select 'b' as fio, '046-944-605 86' as inn
O>from dual connect by level < 4
O>union all
O>select 'c' as fio, '046-947-949 18' as inn
O>from dual connect by level < 4
O>)
O>select case when b.Type = 1 then a.fio else b.Empty end as fio
O> ,case when b.Type = 1 then a.inn else b.Empty end as inn
O>from
O>(
O> select fio, inn
O> from a
O> group by fio, inn
O>) a
O>cross join (select 1 as Type, null as Empty from dual union all select 2, 'пустая строка' from dual) b
O>order by a.fio, a.inn, b.Type
O>
Здравствуйте, Olaf, Вы писали:
O>Здравствуйте, Funny Rabbit, Вы писали:
FR>>После С пустой строки нет
O>
cross join (select 1 as Type, null as Empty from dual union all select 2, 'пустая строка'from dual) b
O>Вместо слова 'пустая строка' вы можете вставить ''
Спасибо. Это был общий пример. Щас получается так.
Тульская область ГУЗ.Узловская РБ. Диагностическое отделение кабинет функциональной диагностики Январь 11693593686
Тульская область ГУЗ.Узловская РБ. Диагностическое отделение кабинет функциональной диагностики Январь 11693593686
Тульская область Январь
Тульская область Январь
Тульская область ГУЗ.Узловская РБ. Диагностическое отделение Кабинет ультразвуковой диагностики Январь 04694460586
Тульская область Январь
Тульская область ГУЗ.Узловская РБ. Диагностическое отделение Январь 04694794918
Тульская область ГУЗ.Узловская РБ. Диагностическое отделение Январь 04694794918
Тульская область Январь
Тульская область Январь
Т.е. Если в группе больше одной записи, то и пустых строк равно количество в группе. А надо чтобы одну. Олаф. Помоги.
Здравствуйте, Funny Rabbit, Вы писали:
FR>Т.е. Если в группе больше одной записи, то и пустых строк равно количество в группе. А надо чтобы одну. Олаф. Помоги.
Так у вас там группировка, по fio и inn, она должна свернуть все записи в группу (одну запись).
Или эта группа чисто виртуальная, и на самом деле не нужно ничего группировать, а необходимо отобразить пустую строку только для одной записи этой "виртуальной" группы ?
Здравствуйте, Olaf, Вы писали:
O>Здравствуйте, Funny Rabbit, Вы писали:
FR>>Т.е. Если в группе больше одной записи, то и пустых строк равно количество в группе. А надо чтобы одну. Олаф. Помоги.
O>Так у вас там группировка, по fio и inn, она должна свернуть все записи в группу (одну запись). O>Или эта группа чисто виртуальная, и на самом деле не нужно ничего группировать, а необходимо отобразить пустую строку только для одной записи этой "виртуальной" группы ?
Здравствуйте, Funny Rabbit, Вы писали:
O>>Так у вас там группировка, по fio и inn, она должна свернуть все записи в группу (одну запись). O>>Или эта группа чисто виртуальная, и на самом деле не нужно ничего группировать, а необходимо отобразить пустую строку только для одной записи этой "виртуальной" группы ?
FR>Второй вариант
Если только так...
with a as (
select 'a' as fio, '116-935-936 86' as inn
from dual connect by level < 5
union all
select 'b' as fio, '046-944-605 86' as inn
from dual connect by level < 4
union all
select 'c' as fio, '046-947-949 18' as inn
from dual connect by level < 1
union all
select 'a' as fio, '046-947-949 18' as inn
from dual connect by level < 1
union all
select 'c' as fio, '046-944-605 86' as inn
from dual connect by level < 4
)
select c.fio, c.inn
from
(
select fio, inn, fio as key1, inn as key2, row_number() over(partition by fio, inn order by fio, inn) as n
from a
union all
select ' ' as fio , ' ' as inn, fio, inn, count(*) + 1 as cnt
from a
group by fio, inn
) c
order by c.key1, c.key2, n
Select
case when nn is not null then fio else ‘Пусто’ end as Fio2,
case when nn is not null then Inn else ‘Пусто’ end as Inn2
From
(
Select distinct Fio, Inn, IDRow_In_Group as NN From table
Union all
Select distinct Fio, Inn, Null as NN From table
) q
Order by fio,inn,NN nulls last
--
Получается то же самое что и в предыдущем ответе
Здравствуйте, Funny Rabbit, Вы писали:
FR>Надо: FR>1. Сгруппировать по фио и инн. FR>2. После каждой такой группы вывести пустую строчку.
FR>Помогите. 3 дня голову ломаю
Коллега, я понимаю, что почитать документацию по oracle это не ваш метод, но прошу обратить внимание на предложение group by rollup
with a as (
select 'a' as fio, '116-935-936 86' as inn
from dual connect by level < 4
union all
select 'b' as fio, '046-944-605 86' as inn
from dual connect by level < 4
union all
select 'c' as fio, '046-947-949 18' as inn
from dual connect by level < 4
)
select a.*, grouping_id(fio, inn) from a group by rollup(fio, inn)
Возможно это то, что вам нужно. А используя функцию grouping_id и инструкцию case when можно добиться чего угодно.
Здравствуйте, Funny Rabbit, Вы писали:
FR>Надо: FR>1. Сгруппировать по фио и инн.
group by фио, инн
FR>2. После каждой такой группы вывести пустую строчку.
Это задача для уровня презентации, не для DAO.
Еще одно решение (Вдруг пригодится):
with a as (
select 'a' as fio, '116-935-936 86' as inn, level as Lv
from dual connect by level < 4
union all
select 'b' as fio, '046-944-605 86' as inn, level
from dual connect by level < 4
union all
select 'c' as fio, '046-947-949 18' as inn, level
from dual connect by level < 4
)
select
case when a.lv is null then null else a.fio end as Fio,
case when a.lv is null then null else a.inn end as Inn
from a
group by GROUPING sets((a.fio,a.inn, a.lv),(a.fio,a.inn))