SQLite - Transformar linhas em colunas
Olá pessoal!
No SQLite existe alguma função que seja capaz de transformar linhas em colunas?
Teria que ser um recurso semelhante ao PIVOT do Oracle...
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
Curtidas 0
Respostas
Marisiana Battistella
13/04/2015
Alguém, sabe me informar se existe alguma função que transforme linhas em colunas no SQLite?
GOSTEI 0
Jothaz
13/04/2015
Atualmente acho muito mais viável, produtivo e performático efetuar este tratamento na aplicação. E digo isto por experiência, pois o projeto em que atuo hoje faz uso massivo deste procedimento.
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.
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.
GOSTEI 0
Marisiana Battistella
13/04/2015
Obrigada Jothaz!!
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]
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]
GOSTEI 0
Jothaz
13/04/2015
Que bom que os link tenham alguma utilidade.
A andei pesquisando bastante sobre transformar linhas em colunas.
Boa sorte!
A andei pesquisando bastante sobre transformar linhas em colunas.
Boa sorte!
GOSTEI 0
Marisiana Battistella
13/04/2015
Obrigada!
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:
Mas essa "forma" é útil apenas quando se sabe exatamente quantas linhas irão se tornar colunas.
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.
GOSTEI 0
Marcos P
13/04/2015
Marisiana,
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 !
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 !
GOSTEI 0
Jothaz
13/04/2015
Obrigada!
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:
Mas essa "forma" é útil apenas quando se sabe exatamente quantas linhas irão se tornar colunas.
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.
GOSTEI 0
Marisiana Battistella
13/04/2015
Eu queria mesmo era descobrir se exista algum recurso no SQLite que faz o mesmo que o PIVOT faz, porque me questionaram se existia algum recurso pra fazer isso.
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
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
GOSTEI 0