Dizer que temos uma tabela:
chave | valor | _count |
---|---|---|
um | b | 3 |
c | d | 2 |
o que nós queremos expandir de tal forma que cada chave é mapeada para cada valor distinto na tabela e fica uma _count
0 se o par chave-valor já não tem uma contagem. Por exemplo, para a tabela acima, eu gostaria de ver:
chave | valor | _count |
---|---|---|
um | b | 3 |
um | d | 0 |
c | d | 2 |
c | b | 0 |
Eu tenho uma solução de trabalho:
WITH key_value_pairs AS (
SELECT
a.key,
b.value
FROM
(SELECT DISTINCT key FROM table) a, (SELECT DISTINCT value FROM table) b
)
SELECT
kvp.key,
kvp.value,
COALESCE(base._count, 0) _count
FROM
key_value_pairs kvp
LEFT JOIN
table base ON base.key = kvp.key AND base.value = kvp.value;
Mas eu suspeito que pode haver um mais simples e mais legível e mais eficiente maneira de se implementar isto, alguma sugestão?