powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выводить данные в новый столбец
25 сообщений из 25, страница 1 из 1
Выводить данные в новый столбец
    #39651947
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, подскажите каким образом сделать из первой таблицы вторую?
Итоговые значения за день, по всем кодам оператора. Что то я даже не знаю в какую сторону копать, чтоб к таком у результату прийти

DateTime CodeOper Sum28.04.2018 6:241010028.04.2018 8:302015028.04.2018 9:242020028.04.2018 10:641010030.04.2018 9:253025030.04.2018 10:502025030.04.2018 11:241030030.04.2018 15:243015030.04.2018 16:252010030.04.2018 15:2330160

DateTime Count Code 10 SumDAY 10 Count Code 20 SumDAY 20 Count Code 30 SumDAY 3028.04.2018220023500030.04.2018130023503560
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39651949
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39651952
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RulezzzЧто то я даже не знаю в какую сторону копать, чтоб к таком у результату прийти

Гугли cross-tab.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652349
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
через Pivot получилось, выводит то, что нужно

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT *
FROM
     (SELECT to_char(date_dt,'yyyy.mm.dd'), CARD_NUM, amount
      FROM main_data where 
      DATE_OF > TO_DATE('14.05.2018 00:00:00','dd.mm.yyyy hh24:mi:ss') 
      AND 
      DATE_OF < TO_DATE('20.05.2018 23:59:59','dd.mm.yyyy hh24:mi:ss')
     ) PIVOT (count(amount) AS counts,SUM(amount) AS sums
              FOR CARD_NUM IN (10, 20, 30, null)
               )
ORDER BY 1;


но есть один нюанс у колонки CARD_NUM, кроме значений 10,20... есть еще пустые значения, по ним надо тоже собирать информацию, пробовал выводить через null, возвращает нули, как быть?
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652410
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

оракля card_num сравнивает с 10,20,30 и null
так как null=null false поетому и 0, имхо бага

выход
1) подменить null на заведомо несуществующеее значение (напр 0)
2) отказаться от пивота и делать ручками
,sum(decode(card_num,10,sum)) s_10
....
,sum(decode(card_num,null,sum)) s_null
....

.......
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652508
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, а можно поподробнее расписать второй вариант, а то слегка недопонимаю
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652539
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxтак как null=null falseтогда not (null=null) это true?

Staxпоетому и 0В отсутствие тестовых данных можно гадать, но не делать выводы про баги. А то договоришься, что count(null) должен зависеть от количества строк.
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652543
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxтак как null=null falseтогда not (null=null) это true?
Люблю этот форум :)
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652548
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подправил таким образом, в принципе, заработало

SELECT *
FROM
(SELECT to_char(date_dt,'yyyy.mm.dd'), DECODE(CARD_NUM, null, 11,CARD_SERIES) as CARD_NUM, amount
FROM main_data where
DATE_OF > TO_DATE('14.05.2018 00:00:00','dd.mm.yyyy hh24:mi:ss')
AND
DATE_OF < TO_DATE('20.05.2018 23:59:59','dd.mm.yyyy hh24:mi:ss')
) PIVOT (count(amount) AS counts,SUM(amount) AS sums
FOR CARD_NUM IN (10, 20, 30, 11)
)
ORDER BY 1;
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652555
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

Вы все также теряете 2 секунды (00 и 59)
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652558
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее так, там опечатка

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT *
FROM
(SELECT to_char(date_dt,'yyyy.mm.dd'), DECODE(CARD_NUM, null, 11,CARD_NUM) as CARD_NUM, amount
FROM main_data where 
DATE_OF > TO_DATE('14.05.2018 00:00:00','dd.mm.yyyy hh24:mi:ss') 
AND 
DATE_OF < TO_DATE('20.05.2018 23:59:59','dd.mm.yyyy hh24:mi:ss')
) PIVOT (count(amount) AS counts,SUM(amount) AS sums
FOR CARD_NUM IN (10, 20, 30, 11)
)
ORDER BY 1;
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652559
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

да, да я помню >=
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652562
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxтак как null=null falseтогда not (null=null) это true?

Staxпоетому и 0В отсутствие тестовых данных можно гадать, но не делать выводы про баги. А то договоришься, что count(null) должен зависеть от количества строк.
сначала написал unknow потом исправил на false (знал что неточно)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  1  with main_data (date_dt,card_num,amount) as (
  2  select sysdate,10,100 from dual union all
  3  select sysdate,10,100 from dual union all
  4  select sysdate,20,102 from dual union all
  5  select sysdate,30,103 from dual union all
  6  select sysdate,null,200 from dual union all
  7  select sysdate,null,null from dual
  8  )
  9  ,t as (
 10  select date_dt,nvl(card_num,0) card_num,amount from main_data)
 11  SELECT *
 12  FROM
 13       (SELECT to_char(date_dt,'yyyy.mm.dd'), CARD_NUM, amount
 14        FROM main_data
 15       ) PIVOT (count(*) AS counts,SUM(nvl(amount,0)) AS sums
 16                FOR CARD_NUM IN (10, 20, 30, null)
 17                 )
 18* ORDER BY 1
SQL> /

TO_CHAR(DA  10_COUNTS    10_SUMS  20_COUNTS    20_SUMS  30_COUNTS    30_SUMS NULL_COUNTS  NULL_SUMS
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------- ----------
2018.05.30          2        200          1        102          1        103           0



.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652565
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RulezzzStax, а можно поподробнее расписать второй вариант, а то слегка недопонимаю


Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with main_data (date_dt,card_num,amount) as (
  2  select sysdate,10,100 from dual union all
  3  select sysdate,10,100 from dual union all
  4  select sysdate,20,102 from dual union all
  5  select sysdate,30,103 from dual union all
  6  select sysdate,null,200 from dual union all
  7  select sysdate,null,null from dual
  8  )
  9  ,t as (
 10  select date_dt,nvl(card_num,0) card_num,amount from main_data)
 11  SELECT date_dt
 12  ,count(decode(card_num,10,1)) cc_10,sum(decode(card_num,10,amount)) sum_10
 13  ,count(decode(card_num,20,1)) cc_20,sum(decode(card_num,10,amount)) sum_20
 14  ,count(decode(card_num,30,1)) cc_10,sum(decode(card_num,10,amount)) sum_30
 15  ,count(decode(card_num,null,1)) cc_10,sum(decode(card_num,null,amount)) sum_null
 16  FROM main_data
 17  group by date_dt
 18* ORDER BY 1
SQL> /

DATE_DT       CC_10     SUM_10      CC_20     SUM_20      CC_10     SUM_30      CC_10   SUM_NULL
-------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
30.05.18          2        200          1        200          1        200          2        200

.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652576
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-пропущено...
тогда not (null=null) это true?
Люблю этот форум :)
я не помнил как правильно написать unknows
набрал un с now, глаз заподозрил что что-то не так, решил поменять на false
імхо
в контексте pivot и count(*) = 0 для null значений ето не очень существенно

.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652584
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
ой, не всюду _10 поправил

.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652606
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
 11  SELECT *
 12  FROM
 13       (SELECT to_char(date_dt,'yyyy.mm.dd'), CARD_NUM, amount
 14        FROM main_data
 15       ) PIVOT (count(*) AS counts,SUM(nvl(amount,0)) AS sums
 16                FOR CARD_NUM IN (10, 20, 30, null)
 17                 )

В отсутствие полей неявной группировки, баг не проявляется.
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652617
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, господа! Очень помогли!
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39652648
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-В отсутствие полей неявной группировки, баг не проявляется.

все-таки баг

12, 18 такой же результак как в 11

.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39653098
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как можно сделать, выборку номеров не вручную, а по всем где есть транзакции?

Код: plsql
1.
FOR CARD_NUM IN (10, 20, 30, null)
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39653169
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

1) делать на клиенте
2) хмл pivot
3) формировать селект динамически

.....
stax
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39662346
Rulezzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, подскажите, а можно ли каким то образом добавить условие на ниже приведенную выборку?
К примеру выводить по
card_num=10
card_num=20 if amount > '50'
card_num=20 if amount < '50'
card_num=30

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT *
FROM
     (SELECT to_char(date_dt,'yyyy.mm.dd'), CARD_NUM, amount
      FROM main_data where 
      DATE_OF > TO_DATE('14.05.2018 00:00:00','dd.mm.yyyy hh24:mi:ss') 
      AND 
      DATE_OF < TO_DATE('20.05.2018 23:59:59','dd.mm.yyyy hh24:mi:ss')
     ) PIVOT (count(amount) AS counts,SUM(amount) AS sums
              FOR CARD_NUM IN (10, 
                                            20, 
                                            30, 
                                            null)
               )
ORDER BY 1;
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39662348
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

возможно, CASE ?
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39662351
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

Ф.А.К.
...
Рейтинг: 0 / 0
Выводить данные в новый столбец
    #39662371
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rulezzz,

decode(amount,50,CARD_NUM,null,CARD_NUM,20) CARD_NUM

......
stax
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выводить данные в новый столбец
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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