Oracle, Hibernate, Group By, LISTAGG

1

У меня есть таблица "Ценности":

int id;
double amount;
Date date;
String cryptoName;

Мне нужно получить результат с "датой" и списком "cryptoName" и получить что-то вроде:

             btc       ltc       drk      42coin
27-DEC-14    0.2       5.0       100.0    0.01
28-DEC-14    0.22      5.5       99.5     0.02
29-DEC-14    0.23      6.1       100.6    0.03
30-DEC-14    0.25      6.0       101.2    0.03

Я могу сделать это:

select "Values"."date", LISTAGG("amount", ', ')  WITHIN GROUP (ORDER BY "cryptoName") as "result" from "Values" GROUP BY "Values"."date"

Но в этом случае я получаю два столбца: "дата" и "результат" с моим списком, но мне нужно получить столбец "дата", а несколько столбцов зависят от того, сколько уникального "cryptoName" в таблице. Как я могу это сделать?

Теги:
hibernate

1 ответ

0

Начиная с 11g R1, вы можете использовать оператор PIVOT. см., например: http://oracle-base.com/articles/11g/pivot-and-unpivot-operators-11gr1.php

Или вы можете использовать функцию DECODE вместе с SUM, если вы знаете все уникальные значения столбца ctyptoName следующим образом:

select date,
sum(decode(cryptoName,'value1',amount,0)) as Value1
,sum(decode(cryptoName,'value2',amount,0)) as Value2
,...
from Values
group by date
  • 0
    но я не знаю, какими будут уникальные значения, это зависит от количества уникальных "cryptoName"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню