Ricorsivo quesito - rompere le righe in colonne?
-
04-10-2019 - |
Domanda
Ho una tabella "Famiglie", in questo modo
FamilyID PersonID Relationship
-----------------------------------------------
F001 P001 Son
F001 P002 Daughter
F001 P003 Father
F001 P004 Mother
F002 P005 Daughter
F002 P006 Mother
F003 P007 Son
F003 P008 Mother
e ho bisogno di output come
FamilyID PersonID Father Mother
-------------------------------------------------
F001 P001 P003 P004
F001 P002 P003 P004
F001 P003
F001 P004
F002 P005 P006
F002 P006
F003 P007 P008
F003 P008
In cui sono quotate le PersonID del Padre e Madre per una determinata PersonID (se del caso) in colonne separate. So che questo deve essere una query relativamente banale scrivere (e quindi per trovare le istruzioni per), ma io non riesco a venire con i termini di ricerca corretti. Cercando "SQL query ricorsive" mi ha ottenuto più vicino, ma io non riesco a tradurre questi metodi per quello che sto cercando di fare qui.
Sto cercando di imparare, in modo più metodi sono i benvenuti, come lo è il vocabolario avrei dovuto leggere su. Grazie!
Soluzione
È possibile partecipare al tavolo di sé due volte con join esterni per ottenere ciò che si vuole:
SELECT
T1.FamilyID AS FamilyID,
T1.PersonID AS PersonID,
T2.PersonID AS Father,
T3.PersonID AS Mother
FROM Families T1
LEFT JOIN Families T2
ON T1.FamilyID = T2.FamilyID
AND T1.Relationship IN ('Son', 'Daughter')
AND T2.Relationship = 'Father'
LEFT JOIN Families T3
ON T1.FamilyID = T3.FamilyID
AND T1.Relationship IN ('Son', 'Daughter')
AND T3.Relationship = 'Mother'
Risultato:
FamilyID PersonID Father Mother
F001 P001 P003 P004
F001 P002 P003 P004
F001 P003 NULL NULL
F001 P004 NULL NULL
F002 P005 NULL P006
F002 P006 NULL NULL
F003 P007 NULL P008
F003 P008 NULL NULL
Altri suggerimenti
In SQL Server, la funzione che si utilizza per risolvere i problemi ricorsivi come questi sono espressioni di tabella comuni .