powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Варианты дублирования или вставки пустых строх в результат селекта
20 сообщений из 20, страница 1 из 1
Варианты дублирования или вставки пустых строх в результат селекта
    #39807878
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо, по каждому результату вывести подитоги, как на скриншоте. Где строка 1,2,3 результаты выборки из запроса, а правее дополнительные 3 строки в которых расшифровки по каждой строчке селекта.
Когда данные были ёще не сгруппированы, присваивал нумерацию по необходимым группам с помощью оконной функции и ограничивал вывод через rownum по этой нумерации до 3 строк. И с помощью конструкции CASE присваивал по этой нумерации необходимые вычисления. Теперь после группировки это стало проблемой. Заранее благодарен за любые наводки!
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39807885
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39807910
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousЭпистолярный жанр - не Ваше.
Сделайте пример исходных данных (в форме with ...) и ожидаемый результат, дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается - этим Вы существенно повысите Ваши шансы на квалифицированный совет.
Задача: раздвинуть каждую строку до 3. А по факту, между каждом строкой каким-то образом запихать пару пустых строк или продублировать каждую строку по 2 раза. Мне бы только наводки из вариантов. Не вижу смысла делать данные в with, считаю достаточным описания необходимой задачи
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39807945
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousСделайте пример исходных данных (в форме with ...) и ожидаемый результат,
дополните Вашим вариантом с оконной функцией и комментарием что конкретно не получается -
этим Вы существенно повысите Ваши шансы на квалифицированный совет.
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #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
Варианты дублирования или вставки пустых строх в результат селекта
    #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
Варианты дублирования или вставки пустых строх в результат селекта
    #39808079
Фотография -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
Варианты дублирования или вставки пустых строх в результат селекта
    #39808080
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,
Значения идут в одну строку, а необходимо распределить по строкам
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39808084
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита Аа необходимоКак тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39808099
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никита А,

unpivot (если версия позволяет, если нет - то max(case .... ) ) + lag
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #39808102
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-Как тот, что будет смотреть на результат, отличит перевод строки в значении от перевода строки между значениями?
Пока добился такого результата
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #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
Варианты дублирования или вставки пустых строх в результат селекта
    #39808369
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Намек - GROUPING(Спуск), GROUPING(Горизонт)

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

Я с Вами согласен, но пока я не могу подружить javascript с apex 4
1) Проблема с прикреплением библиотек jquery в apex 4 версии
2) Необходим алгоритм, как вытаскивать данные с помощью javascript и строить таблицы.
...
Рейтинг: 0 / 0
Варианты дублирования или вставки пустых строх в результат селекта
    #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
Варианты дублирования или вставки пустых строх в результат селекта
    #39886555
Никита А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опытным путём вычислил, что если одно и тоже поле добавить в GROUP BY и ROLLUP, то поля задваиваются, по количеству в ROLLUP.
Если необходимо 4 копии сделать, будет выглядеть так:
Код: plsql
1.
GROUP BY COLOR, ROLLUP (COLOR, COLOR, COLOR)


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

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

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


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