@antognolli
Só por curiosidade, onde será aplicado isso?
Montei o cenário desta forma:
CREATE TABLE NUMEROS(
ID NUMBER
,NUMERO NUMBER
);
ALTER TABLE NUMEROS ADD CONSTRAINT PK_NUMEROS PRIMARY KEY(ID);
ALTER TABLE NUMEROS MODIFY NUMERO CONSTRAINT NN_NUMEROS_NUMERO NOT NULL;
INSERT INTO NUMEROS(ID,NUMERO) VALUES(1,1);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(2,2);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(3,3);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(4,4);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(5,5);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(6,6);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(7,7);
INSERT INTO NUMEROS(ID,NUMERO) VALUES(8,8);
COMMIT;
SELECT N1.NUMERO X1,N2.NUMERO X2,N3.NUMERO X3,N4.NUMERO X4,N5.NUMERO X5,N6.NUMERO X6,N7.NUMERO X7,N8.NUMERO X8
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
LEFT JOIN NUMEROS N4 ON N4.NUMERO > N3.NUMERO
LEFT JOIN NUMEROS N5 ON N5.NUMERO > N4.NUMERO
LEFT JOIN NUMEROS N6 ON N6.NUMERO > N5.NUMERO
LEFT JOIN NUMEROS N7 ON N7.NUMERO > N6.NUMERO
LEFT JOIN NUMEROS N8 ON N8.NUMERO > N7.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO+N4.NUMERO+N5.NUMERO+N6.NUMERO+N7.NUMERO+N8.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,N3.NUMERO,N4.NUMERO,N5.NUMERO,N6.NUMERO,N7.NUMERO,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
LEFT JOIN NUMEROS N4 ON N4.NUMERO > N3.NUMERO
LEFT JOIN NUMEROS N5 ON N5.NUMERO > N4.NUMERO
LEFT JOIN NUMEROS N6 ON N6.NUMERO > N5.NUMERO
LEFT JOIN NUMEROS N7 ON N7.NUMERO > N6.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO+N4.NUMERO+N5.NUMERO+N6.NUMERO+N7.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,N3.NUMERO,N4.NUMERO,N5.NUMERO,N6.NUMERO,NULL,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
LEFT JOIN NUMEROS N4 ON N4.NUMERO > N3.NUMERO
LEFT JOIN NUMEROS N5 ON N5.NUMERO > N4.NUMERO
LEFT JOIN NUMEROS N6 ON N6.NUMERO > N5.NUMERO
LEFT JOIN NUMEROS N7 ON N7.NUMERO > N6.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO+N4.NUMERO+N5.NUMERO+N6.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,N3.NUMERO,N4.NUMERO,N5.NUMERO,NULL,NULL,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
LEFT JOIN NUMEROS N4 ON N4.NUMERO > N3.NUMERO
LEFT JOIN NUMEROS N5 ON N5.NUMERO > N4.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO+N4.NUMERO+N5.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,N3.NUMERO,N4.NUMERO,NULL,NULL,NULL,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
LEFT JOIN NUMEROS N4 ON N4.NUMERO > N3.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO+N4.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,N3.NUMERO,NULL,NULL,NULL,NULL,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
LEFT JOIN NUMEROS N3 ON N3.NUMERO > N2.NUMERO
WHERE N1.NUMERO+N2.NUMERO+N3.NUMERO = 12
UNION
SELECT N1.NUMERO,N2.NUMERO,NULL,NULL,NULL,NULL,NULL,NULL
FROM NUMEROS N1
LEFT JOIN NUMEROS N2 ON N2.NUMERO > N1.NUMERO
WHERE N1.NUMERO+N2.NUMERO = 12
ORDER BY 1,2,3,4,5,6,7,8
A combinação de numeros de 1 a 8 que somados resultam em 12 são 10 :woohoo:
Essa é a ideia. Para tornar isso dinamico, utilize monte o SELECT dinamicamente e execute com EXECUTE IMMEDIATE do PL/SQL