How do I pivot values into columns with SQLite?

How do I pivot values into columns with SQLite?



I made a table called tbl with this code:


tbl


CREATE TABLE tbl
(
`Year` int,
`Album` varchar(255),
`Artist` varchar(255),
`Label` varchar(255),
`Genre` varchar(255),
`id` int
)
;

INSERT INTO tbl
(
`Year`,
`Album`,
`Artist`,
`Label`,
`Genre`,
`id`
)
VALUES
(1990, "Greatest Hits", "The Best", "Least Def", "hip hop", 123),
(1990, "Greatest Hits", "The Best", "Roofless", "hip hop", 123),
(1990, "4-Boyz", "3 Guyz", "Pacific", "pop-dance", 23),
(1990, "4-Boyz", "3 Guyz", "Atlantic", "pop-dance", 23)
;



I want to run a query to show me the count of genres for each year, without double counting because of the Label column. I want this:


Label


Year, hip hop, pop-dance
1990, 1, 1



What query must I run to get what I want?




2 Answers
2



Because you can't use pivot, you can do this.


pivot


select year,
count(distinct case when `Genre` = 'hip hop' then 1 end) as hiphop,
count(distinct case when `Genre` = 'pop-dance' then 1 end) as popdance
from tbl
group by year






sqlfiddle.com/#!5/763ad/3 If they want to mess around with it anymore.

– Dresden
May 11 '16 at 19:01






If I add more rows with more different Genres, is there a way to take those into account without having to add more count(distinct case when Genre` = 'new genre' then 1 end) as newgenre` statements?

– Username
May 11 '16 at 20:47



count(distinct case when






No,unfortunately afaik. You will have to do this manually. If it were SQL Server or Oracle you would have had an option of doing a dynamic pivot.

– Vamsi Prabhala
May 11 '16 at 20:49






@vkp How about MySQL or PostgreSQL?

– Username
May 11 '16 at 22:26




The accepted answer worked for me.



I add here a more complex case, with join, in case someone needs.



see also:



Combining 2 SQL queries and getting result set in one



my example:


select Info.*, Roots.*, ColeColeFit.*, f10.*, f20k.* from Info join (select * from Data where Frequency = 10) as f10 on f10.Info_ID = Info.id join (select * from Data where Frequency = 20000) as f20k on f20k.Info_ID = Info.id join Roots on Info.File_Num = Roots."Plant number" join ColeColeFit on ColeColeFit.id = Info.id



Thanks for contributing an answer to Stack Overflow!



But avoid



To learn more, see our tips on writing great answers.



Required, but never shown



Required, but never shown




By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

How do I collapse sections of code in Visual Studio Code for Windows?

ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ