SQL查询和等于

时间:2017-08-08 09:41:56

标签: sql

有三个表,第一个表名是基线,其中包含所有受益人信息和一个名为 PPI得分的列,第二个表名为< strong> PPI_SCORE_TOOKUP ,其中包含六个列,位于 endline 名称的第三个表格下方,其中包含受益人终端评估数据以及 PPI_Score ,我想要的是,加入一些这些表的方式,但 PPI_SCORE_TOOKUP 表中没有基线 endline 表的外键表 PPI_SCORE_TOOKUP endline endline 表中只有 PPI_Score ,我想查询显示一些如果基线表中的ppi值介于或等于 PPI_SCORE_START PPI_SCORE_END ,并且它也是如果 endline 表中的ppi得分介于且等于 PPI_SCORE_START endline 数据及其六列的PPI得分>和 PPI_SCORE_END 都在一行中。

注意:我没有尝试任何查询,因为我不知道如何做到这一点,但我期待在这个问题的底部的预期结果。

表格如下

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

预期结果

enter image description here

1 个答案:

答案 0 :(得分:0)

您的查询可以按以下方式进行:

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

这会将id表中的baselinebaseline_ID表中的endline匹配,保持可能的空值baseline。然后,它会将PPI_SCORE中的baseline与来自ppi_start and ppi_end的{​​{1}}进行匹配。然后我们加入PPI_SCORE_TOOKUP PPI_SCOREendline

将*替换为您想要的任何字段。 See fiddle为工作示例