Overview of SQLite::VirtualTable::Pivot algorithm SELECT entity FROM pivot_table WHERE attribute_1 = value_1 and attribute_2 = value_2; becomes CREATE TEMPORARY TABLE temp1 AS SELECT distinct(entity) as entity FROM base_table WHERE name='attribute_1' AND value = 'value_1'; CREATE TEMPORARY TABLE temp2 AS SELECT distinct(entity) as entity FROM base_table WHERE name='attribute_2' AND value = 'value_2'; SELECT a.entity,a.attribute,a.value FROM base_table a INNER JOIN temp1 ON temp1.entity = a.entity INNER JOIN temp2 ON temp2.entity = a.entity ORDER BY a.entity Then, rows are pivoted one at a time as they are returned. (NB: temp tables are memory-only)