Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.01.04;
Скачать: [xml.tar.bz2];

Вниз

Как трансформировать таблицу? (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.001 c
15-1402429302
Ice_hockey_player
2014-06-10 23:41
2015.01.04
Быстро понимать SQL-запросы


2-1386940018
[ВладОшин]
2013-12-13 17:06
2015.01.04
Служба не работает под Win7


15-1401786497
Ice_hockey_player
2014-06-03 13:08
2015.01.04
Delphi and Informix


2-1386791018
Solyanik
2013-12-11 23:43
2015.01.04
Служба Windows и ADO


15-1401706348
QAZ
2014-06-02 14:52
2015.01.04
Уникод в англоязычной винде, проблемм...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский