SQLite - Transformar linhas em colunas
13/04/2015
0
No SQLite existe alguma função que seja capaz de transformar linhas em colunas?
Teria que ser um recurso semelhante ao PIVOT do Oracle...
select state_code, times_purchased, count(1) cnt from customers group by state_code, times_purchased; CUST_ID STATE_CODE TIMES_PURCHASED ------- ---------- --------------- 1 CT 1 2 NY 10 3 NJ 2 4 NY 4 --- com o uso do PIVOT select * from ( select times_purchased, state_code from customers t ) pivot ( count(state_code) for state_code in ('NY','CT','NJ','FL','MO') ) order by times_purchased / Os dados de saída são apresentados assim: . TIMES_PURCHASED 'NY' 'CT' 'NJ' 'FL' 'MO' --------------- ---------- ---------- ---------- ---------- ---------- 0 16601 90 0 0 0 1 33048 165 0 0 0 2 33151 179 0 0 0 3 32978 173 0 0 0 4 33109 173 0 1 0 ...
Marisiana Battistella
Posts
14/04/2015
Marisiana Battistella
14/04/2015
Jothaz
Então é muito mais tranquilo serializar o resultado e utilizar o JavaScript, no caso uso o AngularJs para este tipo de operação. É rápido, desonera a rede e o servidor.
Agora cada caso é um caso, então dê uma olhada nestes link´s e veja se dá uma luz:
[url:descricao=SQLite-VirtualTable-Pivot-0.02 > SQLite::VirtualTable::Pivot]http://search.cpan.org/~bduggan/SQLite-VirtualTable-Pivot-0.02/lib/SQLite/VirtualTable/Pivot.pm[/url]
Pivot in SQLite
sqlite_pivot_tables.md
sqlite advanced - extract pivot table from db
[url:descricao=Produce a summary (“pivot”?) table]http://ask.webatall.com/sqlite/11309_produce-a-summary-pivot-table.html[/url]
Não usei nenhuma das soluções acima, então boa sorte e bons estudos.
14/04/2015
Marisiana Battistella
Olhei os links que você postou, e, eu acho, que a solução que preciso está no primeiro link:
[url]http://search.cpan.org/~bduggan/SQLite-VirtualTable-Pivot-0.02/lib/SQLite/VirtualTable/Pivot.pm[/url]
14/04/2015
Jothaz
A andei pesquisando bastante sobre transformar linhas em colunas.
Boa sorte!
14/04/2015
Marisiana Battistella
Eu vi que há duas alternativas que retornam os dados da mesma forma quando utilizamos o CASE para transformar linhas em colunas no Oracle e no PostgreSQL.
Uma dessas alternativas é o próprio CASE que, também, existe no SQLite, e a outra é utilizando JOIN como nesse exemplo:
select u.stuid, u.name, s3.marks as subjectid_3, s4.marks as subjectid_4, s5.marks as subjectid_5 from student_temp u left outer join markdetails s3 on u.stuid = s3.stuid and s3.subjectid = 3 left outer join markdetails s4 on u.stuid = s4.stuid and s4.subjectid = 4 left outer join markdetails s5 on u.stuid = s5.stuid and s5.subjectid = 5
Mas essa "forma" é útil apenas quando se sabe exatamente quantas linhas irão se tornar colunas.
14/04/2015
Marcos P
Se a ideia é fazer esse pivot para usar em outro procedimento do lado do próprio banco de dados, tudo bem resolver do lado do SQLITE.
Agora, se a ideia é fazer isso para uso pela aplicação, siga a dica do Jothas e trate direto no programa... é mais fácil e mais rápido para todo o ambiente !
14/04/2015
Jothaz
Eu vi que há duas alternativas que retornam os dados da mesma forma quando utilizamos o CASE para transformar linhas em colunas no Oracle e no PostgreSQL.
Uma dessas alternativas é o próprio CASE que, também, existe no SQLite, e a outra é utilizando JOIN como nesse exemplo:
select u.stuid, u.name, s3.marks as subjectid_3, s4.marks as subjectid_4, s5.marks as subjectid_5 from student_temp u left outer join markdetails s3 on u.stuid = s3.stuid and s3.subjectid = 3 left outer join markdetails s4 on u.stuid = s4.stuid and s4.subjectid = 4 left outer join markdetails s5 on u.stuid = s5.stuid and s5.subjectid = 5
Mas essa "forma" é útil apenas quando se sabe exatamente quantas linhas irão se tornar colunas.
Exatamente onde empaquei, quando estava pesquisando sobre o assunto! kkkk
Se você precisa de algo dinâmico, então a saída é o PIVOT, ai ficamos presos ao SQL Server.
E mesmo a solução so PIVOT com colunas dinâmicas me parece uma gambiarra. kkk
Um forma de contornar é através de Cursores, mas ai também acho que começa a complicar e ir pela trilha da gambiarra. kkk
Ressalto que, a não ser que seja uma condição "sine qua non", o tratamento na aplicação só traz benefícios. No caso optei pelo AngularJS, mas pode ser feita em todas a linguagens atualmente e sempre vai haver ganho.
E tratando na aplicação você fica independente do banco de dados o que, para mim é um bônus.
14/04/2015
Marisiana Battistella
Não trabalho com o SQLite mas como trabalho com análise de dados sempre me perguntam alguma dica ou ajuda.
Sempre tento ajudar os colegas porque sempre acabo aprendendo com isso!!
Então a dica que vocês me passaram é fundamental, vou saber repassar ela para quem me pediu...
Obrigada! =D
Clique aqui para fazer login e interagir na Comunidade :)