Hесложный способ перевернуть запрос с группировкой

добавлено: 24 янв 13
понравилось:0
просмотров: 4738
комментов: 2

теги:

Автор: Myp3_u_K

Чалышев М.М www.orasource.ru ; резюме автора
изучаем SQL группа в контакте - присоединяйтесь

Hесложный способ перевернуть запрос с группировкой
-- условимся, что перечень значений свойств был ограничен
-- для примера создадим таблицу со следующими полями
-- 1) Название
-- 2) Цвет
-- по условиям задачи у нас сеть конечное количество цветов красный , зеленый , синий
create table t1(tid number,tname varchar2(50),tprop varchar2(20));

-- заполним таблицу данными
insert into t1 values(1,'круг','красный');
insert into t1 values(2,'круг','зеленый');
insert into t1 values(3,'круг','зеленый');
insert into t1 values(4,'круг','синий');
insert into t1 values(5,'квадрат','красный');
insert into t1 values(6,'квадрат','синий');
insert into t1 values(7,'квадрат','красный');
insert into t1 values(8,'треугольник','красный');
insert into t1 values(9,'треугольник','синий');


-- выполним свой
select tname, tprop, count(tprop) count from t1 group by tname, tprop



TNAME TPROP COUNT
круг синий 1
круг зеленый 2
круг красный 1
квадрат синий 1
квадрат красный 2
треугольник синий 1
треугольник красный 1


-- таким образом получим количество фигур определенного цвета
-- преобразуем запрос к более интересному виду
select tname, sum(decode(tprop,'синий',1,0)) "синий", sum(decode(tprop,'красный',1,0)) "красный" , sum(decode(tprop,'зеленый',1,0)) "зеленый"  from t1 
group by tname

TNAME синий красный зеленый
квадрат 1 2 0
круг 1 1 2
треугольник 1 1 0


в oracle 11 g появилась конструкция pivot
которая позволяет переворачивать группировки с ограниченным количеством перечислений
приведу пример использования инструкции pivot в рамках решения заданной задачи

SELECT * FROM (select tname, tprop from t1)
  PIVOT ( count(tprop) FOR tprop IN  ('красный','синий','зеленый'));


TNAME 'красный' 'синий' 'зеленый'
квадрат 2 1 0
круг 1 1 2
треугольник 1 1 0



Чалышев М.М www.orasource.ru

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии