SQL Set ristretto di combinazioni
-
21-12-2019 - |
Domanda
Ho un tavolo con colonne A, B, C e mi piacerebbe ricevere tutte le combinazioni di record aventi {B, c} unico. Questo è sia il valore B che il valore C apparirà solo una volta in un set.
Hai qualche idea come ottenere questo?Suppongo che l'output debba contenere una combinazione su una singola riga, che non è un problema.
Per chiarire qui è un esempio:
- .
- 1,1,0
- 6,1,1
- 1,1,2
- 3,2,0
- 5,2,1
- 1,2,3
Una possibile combinazione è {1,1,0}, {1,2,3}, mentre {6,1,1}, {5,2,1}, perché il valore della colonna C "1'Non è unico.Quello che mi piacerebbe ottenere è un tale output:
1,1,0,1,2,3
6,1,1,1,2,3
.
Iow L'uscita sarà N-Tuples avente B, C Valori univoci.
Soluzione
Penso che tu voglia uno strano Verson di un self-join:
select t1.*, t2.*
from table t1 join
table t2
on t1.b <> t2.b and t1.c <> t2.c;
.
Ciò restituirà tutte le coppie dalla tabella in cui le colonne b
hanno valori distinti e le colonne c
hanno valori distinti.
Altri suggerimenti
Questo è il gruppo per cui è.Combina tutti i record con gli stessi valori nel gruppo tramite elenco in una singola riga.
select B, C
from my_table
group by B, C
. La domanda è un po 'vaga, se si desidera solo i valori della soluzione di utilizzo B & C di @llinger, se si desidera tutti i campi per i record che hanno una combinazione B, C che si verifica in quel record ma da nessun'altra parte, utilizzare
SELECT MAX(A),B,C FROM T
GROUP BY B,C
HAVING COUNT(*) = 1
.