Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Варианты дублирования или вставки пустых строх в результат селекта / 20 сообщений из 20, страница 1 из 1
29.04.2019, 19:25
    #39807878
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Мне необходимо, по каждому результату вывести подитоги, как на скриншоте. Где строка 1,2,3 результаты выборки из запроса, а правее дополнительные 3 строки в которых расшифровки по каждой строчке селекта.
Когда данные были ёще не сгруппированы, присваивал нумерацию по необходимым группам с помощью оконной функции и ограничивал вывод через rownum по этой нумерации до 3 строк. И с помощью конструкции CASE присваивал по этой нумерации необходимые вычисления. Теперь после группировки это стало проблемой. Заранее благодарен за любые наводки!
...
Рейтинг: 0 / 0
29.04.2019, 19:36
    #39807885
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Эпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.
...
Рейтинг: 0 / 0
29.04.2019, 20:18
    #39807910
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
andrey_anonymousЭпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.
Задача: раздвинуть каждую строку до 3. А по факту, между каждом строкой каким-то образом запихать пару пустых строк или продублировать каждую строку по 2 раза. Мне бы только наводки из вариантов. Не вижу смысла делать данные в with, считаю достаточным описания необходимой задачи
...
Рейтинг: 0 / 0
29.04.2019, 20:58
    #39807945
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
andrey_anonymousСделайте пример исходных данных (в форме with ...) и ожидаемый результат,
дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается -
этим Вы существенно повысите Ваши шансы на квалифицированный совет.
...
Рейтинг: 0 / 0
30.04.2019, 04:49
    #39808067
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Валерий Юринский,
Есть некая выборка
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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  


Цель: по каждой строчке добавить аналитики, чтобы в итоги выглядило так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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 
...
Рейтинг: 0 / 0
30.04.2019, 06:06
    #39808072
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Что-то похожее на это, только из-за группировки строк по ROLLUP зануляются крайние значения, что недопустимо.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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 (Спуск, Горизонт)
...
Рейтинг: 0 / 0
30.04.2019, 06:46
    #39808079
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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                          
...
Рейтинг: 0 / 0
30.04.2019, 06:58
    #39808080
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
-2-,
Значения идут в одну строку, а необходимо распределить по строкам
...
Рейтинг: 0 / 0
30.04.2019, 07:06
    #39808084
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Никита Аа необходимоКак тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?
...
Рейтинг: 0 / 0
30.04.2019, 07:46
    #39808099
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Никита А,

unpivot (если версия позволяет, если нет - то max(case .... ) ) + lag
...
Рейтинг: 0 / 0
30.04.2019, 07:50
    #39808102
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
-2-Как тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?
Пока добился такого результата
...
Рейтинг: 0 / 0
30.04.2019, 15:27
    #39808360
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Никита Ачтобы в итоги выглядило

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
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
;        

...
Рейтинг: 0 / 0
30.04.2019, 15:36
    #39808369
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Намек - GROUPING(Спуск), GROUPING(Горизонт)

SY.
...
Рейтинг: 0 / 0
01.05.2019, 08:45
    #39808685
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
andrey_anonymousСкажем прямо: эта задача правильно решается клиентом, на клиенте и для клиента.
Средствами SQL ее решать не следует, хотя и возможно:

Я с Вами согласен, но пока я не могу подружить javascript с apex 4
1) Проблема с прикреплением библиотек jquery в apex 4 версии
2) Необходим алгоритм, как вытаскивать данные с помощью javascript и строить таблицы.
...
Рейтинг: 0 / 0
01.05.2019, 08:54
    #39808689
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
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
;        


Спасибо за предложенные варианты, понравился первый вариант. После выходных буду пробовать реализовывать, так как Ваш вариант презентабельней выглядит.
...
Рейтинг: 0 / 0
08.11.2019, 06:44
    #39886555
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Опытным путём вычислил, что если одно и тоже поле добавить в GROUP BY и ROLLUP, то поля задваиваются, по количеству в ROLLUP.
Если необходимо 4 копии сделать, будет выглядеть так:
Код: plsql
1.
GROUP BY COLOR, ROLLUP (COLOR, COLOR, COLOR)


Таким приёмом я и воспользовался.
...
Рейтинг: 0 / 0
08.11.2019, 06:56
    #39886558
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Никита А
Опытным путём
Т.е. методом ненаучного тыка? А чтение документации - это для лохов?
Жизнь за подобное непременно ударит, если не сразу.
...
Рейтинг: 0 / 0
08.11.2019, 07:43
    #39886564
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
Никита А
Таким приёмом я и воспользовался
То есть, полгода не хватило на освоение unpivot. Зато сколько за это время можно было поставить опытов с group by!
Никита А
Код: plsql
1.
ROLLUP (COLOR, COLOR, COLOR)

cube(0,1) очевиднее.
...
Рейтинг: 0 / 0
08.11.2019, 10:05
    #39886620
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
-2-
То есть, полгода не хватило на освоение unpivot. Зато сколько за это время можно было поставить опытов с group by!

За пол года проснулась совесть, чтобы ответь.
В моём случае pivot необходим был, если точнее.
Насчёт cube надо попробовать.
...
Рейтинг: 0 / 0
08.11.2019, 10:06
    #39886621
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Варианты дублирования или вставки пустых строх в результат селекта
-2-,
Все же, unpivot, Вы правы!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Варианты дублирования или вставки пустых строх в результат селекта / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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