Вопрос все еще слишком расплывчат, но в честь движения "будь милым" и "ответь что-нибудь" в Переполнении стека, вот начало решения:
/*
DROP TABLE IF EXISTS movie;
CREATE TEMP TABLE movie
(id INTEGER NOT NULL UNIQUE PRIMARY KEY AUTOINCREMENT,
genres TEXT);
INSERT INTO movie (genres)
VALUES
('Action'),
('Western|Crime'),
('Drama|Western|Comedy|Horror');
*/
WITH RECURSIVE split AS (
SELECT id,
0 AS num,
instr(genres,'|') AS delimit,
null AS genre,
genres AS remain
FROM movie
WHERE genres is not null
UNION
SELECT
id,
num + 1 AS num,
CASE WHEN delimit <= 0 THEN -1
ELSE instr(substr(remain, delimit + 1),'|') END AS delimit,
CASE WHEN delimit <= 0 THEN remain
ELSE substr(remain, 1, delimit -1) END AS genre,
CASE WHEN delimit <= 0 THEN null
ELSE substr(remain, delimit + 1) END AS remain
FROM split
WHERE delimit >= 0
)
SELECT id, num, genre
FROM split
WHERE genre is not null
ORDER BY id, num;