首页 > 解决方案 > where 语句中的 case 语句

问题描述

给定一个包含多行且没有主键的表,例如:

User         STATE    License
----         -----    -------
User1        FL        aaaaaa
User1        AL        bbbbbb
User2        CO        cccccc
User2        CA        dddddd
User3        GA        eeeeee
User4        NULL      NULL

我正在尝试编写一个查询,该查询将仅返回一个州的用户和许可证。条件是如果状态为 CO,则返回包含 CO 作为状态的行中的用户和许可证。否则,对于该特定用户,任何一行都足够了。例如,我希望我的输出看起来像:

User         STATE    License
----         -----    -------
User1        AL        bbbbbb  or     User1        FL        aaaaaa (I don't care)
User2        CO        cccccc
User3        GA        eeeeee
User4        NULL      NULL

编辑:我需要每个用户返回一行。如果有 CO 许可证,我需要将其作为返回的行,否则任何行都足够了。如果该用户在表中至少有一个条目,则只需要返回一条记录。

我尝试做这样的事情,但没有奏效。

SELECT USER,  
  STATE,  
  LICENSE 
FROM LicenseTable  
Where STATE =   
CASE   
   WHEN state = 'CO' THEN 'CO'  
   ELSE max(state)  
 END  

任何帮助将不胜感激。

标签: sqlcasewhere

解决方案


希望此查询对您有所帮助:

SELECT top 1 username,state,license FROM LicenseTable where username = 'User1' 
order by case when state='CO' then 0 else 1 end;

我们正在做的是以这样一种方式对结果进行排序,即当结果中存在 CO 时,我们以 CO 出现在顶部的方式进行排序,并显示该结果的第一条记录。

链接到相同的 sql fiddle


推荐阅读