首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑SQL查询

编辑SQL查询
EN

Stack Overflow用户
提问于 2011-09-03 18:01:00
回答 2查看 100关注 0票数 0

table1包含以下各列:

代码语言:javascript
复制
id name  value event
1  name1  0.5   f
2  name2  1.9   f
3  name3  2.6   f
4  name4  0.2   f
5  name5  0     r
6  name6  text  r
7  name7  text2 t
8  name8  5     t
....
999  name999 4.7  f

table2具有以下列

代码语言:javascript
复制
id risk     value
1  very low 0
1  low      0.5
2  medium   1.5
3  high     2.5
4 very high 3

结果:

代码语言:javascript
复制
1  name5    very high
2  name6    very high
3  name999  high
4  name3    high
5  name2    medium
6  name1    low
7  name7    very low
8  name8    very low

到目前为止的查询是(没有r和t的事件,给出了非常高和非常低的is):

代码语言:javascript
复制
    SELECT table1.id
     , table1.event
     , table2.risk 
    FROM table1
     JOIN table2
      ON table2.value = ( SELECT MAX(table2.value)
                   FROM table2
                   WHERE table2.value <= table1.value
                 )
    ORDER BY table1.value DESC
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-03 22:34:28

代码语言:javascript
复制
SELECT table1.id, table1.name,
   CASE table1.event
     WHEN 'r' THEN 'very high'
     WHEN 't' THEN 'very low'
     ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value
           ORDER BY table2.value DESC LIMIT 1)
   END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
票数 0
EN

Stack Overflow用户

发布于 2011-09-03 22:15:51

试试这个,它可以在SQL Server2008中运行,应该非常接近您在mySQL中所需的内容

代码语言:javascript
复制
select t1.*,coalesce(a.risk,b.risk,c.risk) as risk
from t1 
left join 
( select risk from t2 where id = (SELECT MAX(t2.value) 
      FROM t2,t1 WHERE t2.value <= t1.value))
 a on t1.event='f' 
left join t2 b on t1.event='r' and b.id=5
left join t2 c on t1.event='t' and c.id=1
order by t1.value desc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7292438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档