sql里面的判断

A表中有一个字段bb,在某些条件下,当字段bb的长度有4及以上的值时,取长度为4以上的值,如果字段bb没有长度超过4的,则取长度为2的值 ,请问这个SQL可以实现吗

image.png

SELECT sum(amount) FROM A

WHERE 条件判断

(当id=2时,因为bb没有长度超过4的,则取cc这个长度为2的值像表格里这样,当id=1时,bb字段取到的就是aa2020、aa2021这些长度超过4的)

访客登录 发布于 2021-7-2 10:42 (编辑于 2021-7-2 11:41)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
1
liu.yangLv2初级互助
发布于2021-7-2 10:48(编辑于 2021-7-2 11:47)

where  ((length(bb)>=4 and max(length(bb))over(partition by id)>=4) or

 (length(bb)=2 and max(length(bb))over(partition by id)<4)

如果可以使用开窗函数的话

select * from(

select  id,bb,max(lenght(bb))over(partition by id) as rn,length(bb) as ln)tt

where( (ln>=4 and rn>=4) or (ln=2 and rn<4))

最佳回答
0
snrtuemcLv8专家互助
发布于2021-7-2 10:45(编辑于 2021-7-2 10:48)

使用case when来做啊

select case when len(bb)>4 then substring(bb,4)  else substring(bb,4) end as bb1 from A

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-7-2 10:47

SELECT (CASE WHEN LEN(BB)>=4 THEN RIGHT(BB,LEN(BB)-3)

             ELSE LEFT(BB,2) END)

长度为2不晓得怎么个长度2就取了以开始为起点截取

  • 访客登录 访客登录(提问者) 问题描述更新了,请大神看看
    2021-07-02 11:42 
  • Z4u3z1 Z4u3z1 回复 访客登录(提问者) 那么问题来了:当ID=2且BB长度也大于等于4的时候是否也只要BB长度大于等于4那一行的数据?
    2021-07-02 11:46 
  • 访客登录 访客登录(提问者) 回复 Z4u3z1 是的,就像举例里面的id=1是,只要bb字段长度大于4的那三个数据的值
    2021-07-02 13:51 
最佳回答
0
用户K5472706Lv2见习互助
发布于2021-7-4 16:51(编辑于 2021-7-4 16:52)

else substring(bb,4) end as bb1 from C

最佳回答
0
LTC朝Lv6高级互助
发布于2022-1-5 09:17(编辑于 2022-1-5 09:18)

image.png

第一个人的sql思路是正确的,但是写法有一点问题。我的数据库是oracle,你根据你的数据库适当调整语法。

  • 5关注人数
  • 739浏览人数
  • 最后回答于:2022-1-5 09:18
    请选择关闭问题的原因
    确定 取消
    返回顶部