Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
Мне необходимо, по каждому результату вывести подитоги, как на скриншоте. Где строка 1,2,3 результаты выборки из запроса, а правее дополнительные 3 строки в которых расшифровки по каждой строчке селекта.
Когда данные были ёще не сгруппированы, присваивал нумерацию по необходимым группам с помощью оконной функции и ограничивал вывод через rownum по этой нумерации до 3 строк. И с помощью конструкции CASE присваивал по этой нумерации необходимые вычисления. Теперь после группировки это стало проблемой. Заранее благодарен за любые наводки!

К сообщению приложен файл. Размер - 5Kb
29 апр 19, 19:25    [21874788]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Эпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.
29 апр 19, 19:36    [21874798]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
andrey_anonymous
Эпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.

Задача: раздвинуть каждую строку до 3. А по факту, между каждом строкой каким-то образом запихать пару пустых строк или продублировать каждую строку по 2 раза. Мне бы только наводки из вариантов. Не вижу смысла делать данные в with, считаю достаточным описания необходимой задачи
29 апр 19, 20:18    [21874840]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Валерий Юринский
Member

Откуда: Москва, "ФОРС Дистрибуция"
Сообщений: 1158
andrey_anonymous
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат,
дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается -
этим Вы существенно повысите Ваши шансы на квалифицированный совет.
29 апр 19, 20:58    [21874885]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
Валерий Юринский,
Есть некая выборка
WITH t (Машины, Подъём, Спуск, Горизонт) AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
SELECT *
FROM t  

Цель: по каждой строчке добавить аналитики, чтобы в итоги выглядило так
WITH t (Машины, Величина, Показатели) AS (
SELECT 'Машина 1', 'Подъём'   ,'500m'   FROM DUAL UNION ALL
SELECT '',         'Спуск'    ,'400m' FROM DUAL UNION ALL
SELECT '',         'Горизонт' ,'250m' FROM DUAL UNION ALL
SELECT 'Машина 2', 'Подъём'   ,'700m' FROM DUAL UNION ALL
SELECT '',         'Спуск'    ,'100m' FROM DUAL UNION ALL
SELECT '',         'Горизонт' ,'40m' FROM DUAL UNION ALL
SELECT 'Машина 3', 'Подъём'   ,'80m' FROM DUAL UNION ALL
SELECT '',         'Спуск'    ,'100m' FROM DUAL UNION ALL
SELECT '',         'Горизонт' ,'200m' FROM DUAL 
)
SELECT *
FROM t 
30 апр 19, 04:49    [21875077]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
Что-то похожее на это, только из-за группировки строк по ROLLUP зануляются крайние значения, что недопустимо.
WITH t (Машины, Подъём, Спуск, Горизонт) AS (
SELECT 'Машина 1','500','200','300' FROM DUAL UNION ALL
SELECT 'Машина 2','50','40','20'  FROM DUAL UNION ALL
SELECT 'Машина 3','100','400','250'  FROM DUAL 
)
SELECT Машины
    , CASE ROW_NUMBER() OVER (PARTITION BY Машины ORDER BY Машины) 
            WHEN 1 THEN 'Подъём' 
            WHEN 2 THEN 'Спуск' 
            WHEN 3 THEN 'Горизонт' END AS "Величина"
    , CASE ROW_NUMBER() OVER (PARTITION BY Машины ORDER BY Машины) 
            WHEN 1 THEN Подъём 
            WHEN 2 THEN Спуск 
            WHEN 3 THEN Горизонт END AS "Расстояние"     
FROM t 
GROUP BY Машины, Подъём, ROLLUP (Спуск, Горизонт)
30 апр 19, 06:06    [21875090]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
-2-
Member

Откуда:
Сообщений: 14995
WITH t (Машины, Подъём, Спуск, Горизонт) AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
SELECT Машины, 'Подъём   '||Подъём||' 
Спуск    '||Спуск||'
Горизонт '||Горизонт Показатели
FROM t;

МАШИНЫ   ПОКАЗАТЕЛИ                            
-------- --------------------------------------
Машина 1 Подъём   500                           
         Спуск    400                          
         Горизонт 250                          

Машина 2 Подъём   500                           
         Спуск    400                          
         Горизонт 250                          

Машина 3 Подъём   500                           
         Спуск    400                          
         Горизонт 250                          
30 апр 19, 06:46    [21875101]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
-2-,
Значения идут в одну строку, а необходимо распределить по строкам
30 апр 19, 06:58    [21875103]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
-2-
Member

Откуда:
Сообщений: 14995
Никита А
а необходимо
Как тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?
30 апр 19, 07:06    [21875108]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
MazoHist
Member

Откуда:
Сообщений: 121
Никита А,

unpivot (если версия позволяет, если нет - то max(case .... ) ) + lag
30 апр 19, 07:46    [21875129]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
-2-
Как тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?

Пока добился такого результата

К сообщению приложен файл. Размер - 21Kb
30 апр 19, 07:50    [21875135]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Никита А
чтобы в итоги выглядило


Скажем прямо: эта задача правильно решается клиентом, на клиенте и для клиента.
Средствами SQL ее решать не следует, хотя и возможно:

+
WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
SELECT case t."Величина" when 'Подъём' then t."Машины" end "Машины"
     , "Величина", "Показатели"
FROM t  
unpivot ("Показатели" for "Величина" in ( ("Подъём") as 'Подъём'
                                        , ("Спуск") as 'Спуск'
                                        , ("Горизонт") as 'Горизонт')
        ) t
;

WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
select decode(x.f, 1, "Машины") "Машины"
     , decode(x.f, 1, 'Подъём' 
                 , 2, 'Спуск' 
                 , 3, 'Горизонт' ) "Величина"
     , decode(x.f, 1, "Подъём"
                 , 2, "Спуск"
                 , 3, "Горизонт" ) "Показатели"
  from t, (select rownum f from dual connect by level <=3) x
 order by t."Машины", x.f
;

WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
select "Машины", "Величина", "Показатели"
  from (  select "Машины" g, 1 o, "Машины", 'Подъём' "Величина", "Подъём" "Показатели" from t
union all select "Машины", 2 o, null, 'Спуск' ,  "Спуск"  from t
union all select "Машины", 3 o, null, 'Горизонт', "Горизонт" from t
       ) order by g,o
;        
30 апр 19, 15:27    [21875616]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9635
Намек - GROUPING(Спуск), GROUPING(Горизонт)

SY.
30 апр 19, 15:36    [21875631]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
andrey_anonymous
Скажем прямо: эта задача правильно решается клиентом, на клиенте и для клиента.
Средствами SQL ее решать не следует, хотя и возможно:

Я с Вами согласен, но пока я не могу подружить javascript с apex 4
1) Проблема с прикреплением библиотек jquery в apex 4 версии
2) Необходим алгоритм, как вытаскивать данные с помощью javascript и строить таблицы.
1 май 19, 08:45    [21876139]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
andrey_anonymous
+
WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
SELECT case t."Величина" when 'Подъём' then t."Машины" end "Машины"
     , "Величина", "Показатели"
FROM t  
unpivot ("Показатели" for "Величина" in ( ("Подъём") as 'Подъём'
                                        , ("Спуск") as 'Спуск'
                                        , ("Горизонт") as 'Горизонт')
        ) t
;

WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
select decode(x.f, 1, "Машины") "Машины"
     , decode(x.f, 1, 'Подъём' 
                 , 2, 'Спуск' 
                 , 3, 'Горизонт' ) "Величина"
     , decode(x.f, 1, "Подъём"
                 , 2, "Спуск"
                 , 3, "Горизонт" ) "Показатели"
  from t, (select rownum f from dual connect by level <=3) x
 order by t."Машины", x.f
;

WITH t ("Машины", "Подъём", "Спуск", "Горизонт") AS (
SELECT 'Машина 1','500','400','250' FROM DUAL UNION ALL
SELECT 'Машина 2','500','400','250'  FROM DUAL UNION ALL
SELECT 'Машина 3','500','400','250'  FROM DUAL 
)
select "Машины", "Величина", "Показатели"
  from (  select "Машины" g, 1 o, "Машины", 'Подъём' "Величина", "Подъём" "Показатели" from t
union all select "Машины", 2 o, null, 'Спуск' ,  "Спуск"  from t
union all select "Машины", 3 o, null, 'Горизонт', "Горизонт" from t
       ) order by g,o
;        

Спасибо за предложенные варианты, понравился первый вариант. После выходных буду пробовать реализовывать, так как Ваш вариант презентабельней выглядит.
1 май 19, 08:54    [21876144]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
Опытным путём вычислил, что если одно и тоже поле добавить в GROUP BY и ROLLUP, то поля задваиваются, по количеству в ROLLUP.
Если необходимо 4 копии сделать, будет выглядеть так:
GROUP BY COLOR, ROLLUP (COLOR, COLOR, COLOR)

Таким приёмом я и воспользовался.
8 ноя 19, 06:44    [22012017]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29406
Никита А
Опытным путём
Т.е. методом ненаучного тыка? А чтение документации - это для лохов?
Жизнь за подобное непременно ударит, если не сразу.
8 ноя 19, 06:56    [22012022]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
-2-
Member

Откуда:
Сообщений: 14995
Никита А
Таким приёмом я и воспользовался
То есть, полгода не хватило на освоение unpivot. Зато сколько за это время можно было поставить опытов с group by!
Никита А
ROLLUP (COLOR, COLOR, COLOR)
cube(0,1) очевиднее.
8 ноя 19, 07:43    [22012031]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
-2-
То есть, полгода не хватило на освоение unpivot. Зато сколько за это время можно было поставить опытов с group by!

За пол года проснулась совесть, чтобы ответь.
В моём случае pivot необходим был, если точнее.
Насчёт cube надо попробовать.
8 ноя 19, 10:05    [22012130]     Ответить | Цитировать Сообщить модератору
 Re: Варианты дублирования или вставки пустых строх в результат селекта  [new]
Никита А
Member

Откуда:
Сообщений: 114
-2-,
Все же, unpivot, Вы правы!
8 ноя 19, 10:06    [22012131]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить