能达成我需要结果的sql

天下在我心 2017-09-19 06:38:27
SELECT [State]
FROM tablename
WHERE .......
这样的语句,结果可能有1~N行
状态为int,可能数值为0,1,2,3
需要当有2这个值的时候输出为2
没有2这个值的时候输出最小值
...全文
1210 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天下在我心 2017-09-27
  • 打赏
  • 举报
回复
这个这样实现相对复杂了点,最后还是通过状态的修改简单实现了。 原来设计时用int型表示处理的状态位,值设计不够合理,所以我需要这样的sql取数据。 谢谢楼上各位的帮助!
道素 2017-09-21
  • 打赏
  • 举报
回复
下面的例子是用master.dbo.spt_values 模拟数据,number就当成你的state 为测试数值的起始为10内随机 因为没完全理解你的意思,所以两种取值办法,一种非2是显示的全部范围的最小值,如果恰好2是最小,那么结果都是2 第2中取最小值时将state=2的排除在外,再取最小值

select case when number=2 then 2 else min(number)over() end
,case when number=2 then 2 else min(NULLIF(number,2))over() end
, * 
from master.dbo.spt_values 
where type='P'
and ((number>rand()*10 and number<100) or number=2)
小野马1209 2017-09-20
  • 打赏
  • 举报
回复
create table tabletest (state int) 
insert into tabletest
select 0 union all
select 1 union all
select 2 union all
select 3 union all
select 2 

select  case state when 2 then 2
        Else MIN(state)
        end as state
from tabletest
group by
你的案例不全,在最后一句group by中加你的分组字段就可以实现了
繁花尽流年 2017-09-20
  • 打赏
  • 举报
回复
LZ说的有点含糊,最好举下例子
  • 打赏
  • 举报
回复
可能数值为0,1,2,3 需要当有2这个值的时候输出为2 没有2这个值的时候输出最小值 这个没有2 取最小值,通过什么分组的 你给些数据出来
二月十六 2017-09-19
  • 打赏
  • 举报
回复
SELECT  [State]
FROM tablename
WHERE State = 2
OR ( NOT EXISTS ( SELECT *
FROM tablename
WHERE State = 2 )
AND tablename.State = ( SELECT MIN(State)
FROM tablename
)
);
听雨停了 2017-09-19
  • 打赏
  • 举报
回复
select case state when 2 then state else min (state) over(partition by select(1)) end as state from tablename where....

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧