问:casewhen可以这么写?and作为条件

case when index_name_en = '金金属量' and company_name = '塞尔维亚紫金矿业有限公司' then 'Au'

     when index_name_en = '铜金属量' and company_name = '塞尔维亚紫金矿业有限公司' then 'Cu'

     when index_name_en = '金金属量' and company_name = '塞尔维亚紫金铜业有限公司' then 'Cu'

     when index_name_en = '金金属量' and company_name = '塞尔维亚紫金铜业有限公司' then 'Cu'

     end as 矿种

FineReport 数字化转型的学习者和实践者 发布于 2024-1-30 11:34
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-1-30 11:35(编辑于 2024-1-30 11:37)

可以啊,看下ai回答

你的SQL查询中的问题在于重复的条件和结果。在SQL中,CASE语句的每个WHEN子句必须具有唯一的条件,并且每个WHEN子句的结果也必须是唯一的。在你的代码中,when index_name_en = '金金属量' and company_name = '塞尔维亚紫金铜业有限公司' then 'Cu' 这个条件被重复了两次,这是不合法的。

根据你的需求,我假设你想要为每一种组合的index_name_en和company_name返回一个唯一的矿种。如果两个条件都相同,那么结果也应该相同。我为你修改了SQL查询:

sql复制代码

CASE  
WHEN index_name_en = '金金属量' AND company_name = '塞尔维亚紫金矿业有限公司' THEN 'Au'  
WHEN index_name_en = '铜金属量' AND company_name = '塞尔维亚紫金矿业有限公司' THEN 'Cu'  
WHEN index_name_en = '金金属量' AND company_name = '塞尔维亚紫金铜业有限公司' THEN 'Cu1' -- 修改了这里,为重复的条件分配了不同的结果  
ELSE '其他矿种' -- 添加了默认情况,处理未在上述条件中匹配的情况  
END AS 矿种

这个查询会检查index_name_en和company_name的组合,并为每一种组合返回一个唯一的矿种。如果index_name_en是'金金属量'并且company_name是'塞尔维亚紫金铜业有限公司',那么返回的结果将是'Cu1',而不是重复的'Cu'。同时,如果条件没有匹配到任何已知的矿种,那么将返回'其他矿种'。

最佳回答
0
Z4u3z1Lv6专家互助
发布于2024-1-30 11:36
最佳回答
0
ID1208Lv6高级互助
发布于2024-1-30 11:46

这里是不是重复了?

image.png

最佳回答
0
没有想好名字那就叫小明吧Lv4见习互助
发布于2024-1-30 11:46(编辑于 2024-1-30 11:49)

case when company_name = '塞尔维亚紫金矿业有限公司'  then case when index_name_en = '金金属量' then 'Au'

                                                            when index_name_en = '铜金属量' then 'Cu' 

                                                            when index_name_en = '金金属量A' then 'Cu' else null end else null end

首先,条件要唯一,要不然出来的结果会不正确,再一个你这种写法,如果是oracle,index_name_en字段可以用decode函数代替:decode(index_name_en,'铜金属量','Cu','金金属量A','Cu' ,null),MYSQL可以用if(),其他的数据库建议就直接使用CASE when实现!

  • 4关注人数
  • 130浏览人数
  • 最后回答于:2024-1-30 11:49
    请选择关闭问题的原因
    确定 取消
    返回顶部