按表1组合两个表列列值列在表2列值中

时间:2016-04-01 12:00:04

标签: mysql

表1中有2列(名称,编号),表2中有4列(名称,最小值,最大值,颜色)。

Table1 column(Number)包含一个数值,表2中有一个范围(Min和Max)。

我的要求是在Name列的基础上从table1中选择Name,Number,从table2中选择Color。

如果Table1中的Number值高于Table2的Max值,则需要从Color列中选择相同的行值。

**Table1 sample data:**

**Name  Number**
A       33
B       17


**Table2 sample data:**

**Name  Min   Max    Color**
A       0     20     RED
A       21    44     Yellow
A       45    45     Green
B       0     0.9    Green
B       1     15.99  Yellow
B       16    16     RED

**Output**

**Name  Number  Color**
A       33      Yellow
B       17      Red

如果您对上述疑问有任何疑惑,请与我联系......

注意:此查询适用于Tableau中的自定义SQL,因此无法使用CTE或其他方法。

2 个答案:

答案 0 :(得分:0)

你的最后状况相当奇怪。但是,您可以简化逻辑:只需忽略Cluster列并选择min小于或等于数字的最后一行:

max

答案 1 :(得分:0)

SELECT x.*
     , COALESCE(y.color,z.color) color 
  FROM table1 x
  LEFT 
  JOIN table2 y 
    ON y.name = x.name 
   AND x.number BETWEEN y.min AND y.max
  JOIN 
     ( SELECT a.* 
         FROM table2 a 
         JOIN 
            ( SELECT name,MAX(max) max FROM table2 GROUP BY name ) b 
           ON b.name = a.name 
          AND b.max = a.max
     ) z 
    ON z.name = x.name;