Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Нужно Преобразовать таблицу


Автор: bld 7.1.2009, 18:07
Есть таблица:


Name_____Date______WasPresent
Имя1___03.09.2008________1 
Имя1___10.09.2008________1
Имя1___17.09.2008________0
Имя2___03.09.2008________0 
Имя2___10.09.2008________0
Имя2___17.09.2008________1
.............................
.............................

А надо сделать так:

Name___03.09.2008___10.09.2008_____17.09.2008
Имя1______1____________1______________0
Имя2______0____________0______________1

Автор: Deniel_li 21.1.2009, 17:37
create table example_1
(
name varchar2(10),
time_date date,
was_pr number
)

insert into example_1 values
('N1',to_date('03.09.2008','dd.mm.yyyy'),1);
insert into example_1 values
('N1',to_date('10.09.2008','dd.mm.yyyy'),1);
insert into example_1 values
('N1',to_date('17.09.2008','dd.mm.yyyy'),0);
insert into example_1 values
('N2',to_date('03.09.2008','dd.mm.yyyy'),0);
insert into example_1 values
('N2',to_date('10.09.2008','dd.mm.yyyy'),0);
insert into example_1 values
('N2',to_date('17.09.2008','dd.mm.yyyy'),1);


select name, 
min(decode(time_date, to_date('03.09.2008','dd.mm.yyyy'), was_pr, NULL)) as "03.09.2008",
min(decode(time_date, to_date('10.09.2008','dd.mm.yyyy'), was_pr, NULL)) as "10.09.2008",
min(decode(time_date, to_date('17.09.2008','dd.mm.yyyy'), was_pr, NULL)) as "17.09.2008"
 from
(
select name, time_date, sum(was_pr) was_pr
from example_1
group by name, time_date
)
group by name

з.ы. 
1) забыл как в sql server преобразовывается дата... сорри 
2) плохо то, что для написания надо точно знать кол-во новых колонок. Если задача не статическая потребуется обернуть все в функцию

Автор: Zloxa 21.1.2009, 18:24
Цитата

Sql server 2008 

http://technet.microsoft.com/ru-ru/library/ms177410.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)