Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.01.04;
Скачать: CL | DM;

Вниз

Как трансформировать таблицу? (sql)   Найти похожие ветки 

 
ВладОшин ©   (2014-05-30 17:51) [0]

есть таблица:

varchar, varchar, integer
Комната  Вопрос СолькоРазЗвучал

пример
Комната1  вопрос1  7
Комната2  вопрос2  4
Комната3  вопрос6  2
Комната2  вопрос1  3



надо преобразовать в таблицу


       Комната1 Комната2 Комната3  
вопрос1    7        3        0      
вопрос2    0        4        0    
вопрос6    0        0        2  


mssql (но можно и oracle :) )


 
ВладОшин ©   (2014-05-30 17:55) [1]

ни разу так еще не приходилось перемещать, курсоры на ум лезут какие-то..


 
antonn ©   (2014-05-30 17:59) [2]

надо преобразовать в таблицу или в такой вывод (вьюхой, например)?


 
ВладОшин ©   (2014-05-30 18:06) [3]

вроде,
for K in (select distinct Комната )
 for В in (select distinct Вопрос )
-- тут динамически формируем SQL
 set @S = "
    update newtable set СолькоРазЗвучал =
         (select sum(СолькоРазЗвучал ) from table where комтната = K and Вопрос = B)
    where комната__ = K and Вопрос__ = B)
"
exec @S

как-то так, надо допилить, но . .не надо, кажется, т.к. чет ерунда какая-то, кажется


 
ВладОшин ©   (2014-05-30 18:07) [4]


> надо преобразовать в таблицу или в такой вывод

а разница? ну, пока в вывод надо.


 
turbouser ©   (2014-05-30 18:08) [5]

SELECT * FROM
(SELECT Room, Answer, AnswerQuant FROM @T ) AS t PIVOT(SUM(AnswerQuant) FOR Room IN ([Комната1],[Комната2],[Комната3]) ) AS Pivots


 
turbouser ©   (2014-05-30 18:09) [6]

Сорри, не все скопипастил..

DECLARE @T TABLE (Room VARCHAR(50), Answer VARCHAR(50), AnswerQuant INT)
INSERT @T
SELECT "Комната1",  "вопрос1",  7
UNION ALL
SELECT "Комната1",  "вопрос1",  7
UNION ALL
SELECT "Комната2",  "вопрос2",  4
UNION ALL
SELECT "Комната3",  "вопрос6",  2
UNION ALL
SELECT "Комната2",  "вопрос1",  3
--
SELECT * FROM
(SELECT Room, Answer, AnswerQuant FROM @T ) AS t PIVOT(SUM(AnswerQuant) FOR Room IN ([Комната1],[Комната2],[Комната3]) ) AS Pivots


 
turbouser ©   (2014-05-30 18:10) [7]

Result:
Answer Комната1 Комната2 Комната3
вопрос1 14 3 NULL
вопрос2 NULL 4 NULL
вопрос6 NULL NULL 2


 
ВладОшин ©   (2014-05-30 18:15) [8]


> turbouser ©  

спсибо, да, PIVOT, оно
теперь бы в 4к влезло :) там вопросов.. динамически строить все же пидется


 
картман ©   (2014-05-30 18:28) [9]


> там вопросов

а комнат?


 
junglecat   (2014-05-30 18:41) [10]

это квест такой? ходишь по комнатам и отвечаешь на вопросы? )


 
[ВладОшин] ©   (2014-05-30 21:14) [11]


> картман ©   (30.05.14 18:28) [9]

т.е. наоборот, комнат много :)


> junglecat   (30.05.14 18:41) [10]

да это условно, там по другое :)


 
картман ©   (2014-05-30 21:32) [12]


> т.е. наоборот, комнат много :)

так транспонируй в запросе, на клиенте, если понадобится, можно обратно


 
turbouser ©   (2014-05-30 23:38) [13]


> [ВладОшин] ©

Если все сложно и надо только на клиенте отображать, то для этого есть соотв. компоненты. Например cxPivotGrid


 
turbouser ©   (2014-05-30 23:41) [14]

FastCube еще есть


 
Inovet ©   (2014-05-30 23:52) [15]

> [14] turbouser ©   (30.05.14 23:41)
> FastCube

И в ФР кросстаблица есть


 
ВладОшин ©   (2014-05-31 16:50) [16]

не, все это  (cxPivotGrid FastCube  ФР ) хорошо, но не годится
у заказчика есть самописное ПО для вывода в браузер, которое умеет только таблицей показывать. Даже первоначальный вид (м/д прочим, не так просто получается, если собирать по всем ~15 таблицам из 3х БД)- Комната  Вопрос СолькоРазЗвучал - его не устроил. Подавай аз есмь к показу..



Страницы: 1 вся ветка

Текущий архив: 2015.01.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
2-1386791018
Solyanik
2013-12-11 23:43
2015.01.04
Служба Windows и ADO


11-1256374907
Dy1
2009-10-24 13:01
2015.01.04
64 бита


15-1399149002
Юрий
2014-05-04 00:30
2015.01.04
С днем рождения ! 4 мая 2014 воскресенье


15-1402429302
Ice_hockey_player
2014-06-10 23:41
2015.01.04
Быстро понимать SQL-запросы


15-1401457869
ВладОшин
2014-05-30 17:51
2015.01.04
Как трансформировать таблицу? (sql)