where语句中的案例声明

时间:2018-07-17 17:51:18

标签: sql case where

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

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  

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

希望此查询对您有帮助:

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

我们正在做的是对结果进行排序的方式是:当结果中存在CO时,我们就排序,以使CO排在最前面,并显示该结果的第一条记录。

Link to sql fiddle for the same