Eu tenho uma tabela de produtos em que o valor de duas colunas pode implicar em um ou dois resultados reais do produto. Se a coluna X = 1 AND Y = 0 retornar um resultado, se X = 0 e Y = 1 retornar um resultado, se X = 1 AND Y = 1 então retornar dois resultados.
Eu quero escrever uma consulta que irá gerar dois resultados de linha para uma única linha com base na regra acima. Como isso pode ser feito com uma consulta SQL? A UNIÃO é o único caminho?
[EDIT com base no comentário]
TABELA: PRODUTO
ProductId | ABR | UBR
1 | 1 | 1
2 | 1 | 0
3 | 0 | 1
4 | 1 | 1
5 | 1 | 1
Eu quero uma instrução SELECT que irá gerar 8 resultados deste conjunto. Basicamente um resultado para cada instância de ABR ou UBR = 1.
Então eu gostaria que meu resultado fosse:
ProductId | Edition
1 | ABR
1 | UBR
2 | ABR
3 | UBR
4 | ABR
4 | UBR
5 | ABR
5 | UBR
Eu sei que posso conseguir isso usando um UNION, mas eu estava procurando algo mais elegante.
UNION
faz sentido.Você pode colocar o
UNION
em uma subconsulta que irá aprimorá-lo um pouco:Você também pode fazer um
UNPIVOT
eu acho, mas para este caso de uso simplesUNION
parece mais eficiente.Eu usaria
UNPIVOT
para isso a menos queabr
eubr
ambos sejam indexados e uma proporção relativamente baixa contenha o valor1
.(Emprestando a variável de tabela do JNK)