2017-08-08 3 views
0

gibt es drei Tabellen, erster Tabellenname ist Baseline die alle Begünstigten Informationen und eine Spalte im Namen von PPI enthält Score und die zweite Tabelle im Namen von PPI_SCORE_TOOKUP die sechs enthält Spalten wie unter der dritten Tabelle im Namen Endline, die Begünstigten End Line Assessment Daten und auch eine Spalte im Namen PPI_Score enthält, was ich will, ist ein paar, wie diese Tabellen jedoch gibt es keine Fremdschlüssel von die Basislinie und Endline Tabelle in der PPI_SCORE_TOOKUP Tabelle gibt es nur PPI_Score in den Tabellen PPI_SCORE_TOOKUP, endline und endline Tabellen, und ich möchte abfragen einige Basisdaten entlang PPI Ergebnis zu zeigen, wenn die Werte des ppi in die basline Tabelle ist zwischen oder gleich zu PPI_SCORE_START und PPI_SCORE_END und es sollte auch endline Daten desselben Elements zusammen mit dem PPI-Score mit seinen sechs Spalte, wenn ppi-Score in der endline Tabelle ist zwischen und equals zeigen zu PPI_SCORE_START und PPI_SCORE_END alle in einer Zeile.SQL-Abfrage zwischen und gleich

Hinweis: Ich habe noch keine Abfrage versucht, da ich keine Ahnung hatte, wie dies zu tun ist, aber ich erwarte das erwartete Ergebnis am Ende dieser Frage.

Tabellen sind als

baseline table 


ID NAME LAST_NAME DISTRICT PPI_SCORE 
1 A   A   A    10 
2 B   B   B    23 
3 C   C   C    90 
4 D   D   D    47 



endline table 

baseline_ID  Enterprise Market PPI_SCORE 
3     Bee Keeping  Yes 
2     Poultry   No 74 
1     Agriculture  Yes 80 





PPI_SCORE_TOOKUP table 

ppi_start ppi_end national national_150 national_200 usaid 
0    4  100   100    100   100 
10    14  66.1  89.5    96.5  39.2 
5    9  68.8  90.2    96.7  44.4 
15    19  59.5  89.1    97.2  35.2 
20    24  51.3  85.5    96.4  28.8 
25    29  43.5  81.1    93.2  20 
30    34  31.9  74.5    90.4  13.6 
35    39  24.6  66.9    87.3  7.9 
40    44  15.2  58     82.8  4.5 
45    49  11.4  47.9    73.4  4.2 
50    54  6   37.2    68.4  2.6 
55    59  2.7  26.1    61.3  0.5 
60    64  0.9  21     50.4  0.5 
65    69  0   14.3    37.1  0 
70    74  3   14.3    29.2  0 
75    79  0   1.4    5.1   0 
80    84  0   0     9.5   0 
85    89  0   0     15.2  0 
90    94  0   0     0   0 
95    100  0   0     0   0 

Erwartetes Ergebnis

kann

enter image description here

Antwort

0

Ihre Anfrage folgt auf folgende Weise hergestellt werden:

SELECT * 
FROM baseline b 
LEFT JOIN endline e ON b.id = e.baseline_ID 
LEFT JOIN PPI_SCORE_TOOKUP ppi ON b.PPI_SCORE BETWEEN ppi.ppi_start AND ppi.ppi_end 
LEFT JOIN PPI_SCORE_TOOKUP ppi2 ON e.PPI_SCORE BETWEEN ppi2.ppi_start AND ppi2.ppi_end 

Dies entspricht Ihrer id aus der baseline Tabelle mit der baseline_ID aus der endline Tabelle, halten mögliche Nullwerte von baseline. Es entspricht dann der PPI_SCORE von baseline mit ppi_start and ppi_end von PPI_SCORE_TOOKUP. Dann treten wir der PPI_SCORE von endline mit and ppi_end bei.

Durch Ersetzen von * mit den Feldern, die Sie haben möchten. See fiddle für ein funktionierendes Beispiel

+0

Dank @ewolden was über die Endlinie zusammen mit dem ppi-Scores in der Lookup-Tabelle werden Sie schreiben die komplette Abfrage plz –

+0

Haben Sie bei der sqlfiddle mit meinem Beispiel einen Blick darauf werfen? Da wir uns 'endline' und' baseline' anschließen, müssen wir sie nur mit 'PPI_SCORE_TOOKUP' verbinden. Dann sollten alle 3 Tabellen zusammengefügt werden. Wenn im Ergebnis Ergebnisse zu sehen sind, die Sie erwartet haben, lassen Sie es mich wissen. – ewolden

+0

Lassen Sie mich es noch einmal überprüfen –

Verwandte Themen