根据值 - SQL Server,只返回一行返回的行

时间:2018-02-08 21:07:58

标签: sql-server stored-procedures stored-functions

我有一个select查询,它通过Id返回具有不同大小写的表的数据,见下文:

案例1:

+--------+---------+
| RowNum |  Size   |
+--------+---------+
|      1 | large   |
+--------+---------+

案例2:

+--------+---------+
| RowNum |  Size   |
+--------+---------+
|      1 | small   |
|      2 | x-large |
+--------+---------+

案例3:

+--------+---------+
| RowNum |  Size   |
+--------+---------+
|      1 | small   |
|      2 | small   |
|      3 | x-large |
|      4 | large   |
+--------+---------+

案例4:

+--------+---------+
| RowNum |  Size   |
+--------+---------+
|      1 | large   |
|      2 | medium  |
|      3 | large   |
+--------+---------+

案例5:

+--------+---------+
| RowNum |  Size   |
+--------+---------+
|      1 | small   |
|      2 | x-large |
|      3 | medium  |
|      4 | large   |
+--------+---------+

案例6,7,8 ......

注意:所有返回的表可能有不同的行和值,因此它可能是十几种情况,而行号只是一个没有意义的索引。

我只需要返回一行,其最大尺寸与表中的行相比。

例如:

  1. 在案例1中,我只需要' large'行;
  2. 在案例2中,我只需要' x-large'行;
  3. 在案例3中,我只需要' x-large'行;
  4. 在案例4中,我只需要'大'行;
  5. 在案例5中,我只需要' x-large'行;
  6. 任何人都可以帮我找到如何获得结果的方法吗?

    解决方案可以是存储过程,函数,视图或查询。

    非常感谢!

1 个答案:

答案 0 :(得分:1)

只是回答演示文稿问题而不管逻辑是否可以使用CASE而不是ORDER BY

select top 1 *
from 
table
order by (
case size
   when 'x-large' then 4 
   when 'large' then 3
   when 'medium' then 2
   when 'small' then 1
   else 0
end
) desc