求教一个SQLSERVER的IF判断怎么写

image.png

我现在有供应商和销售组两个字段

我想就是按照销售组的优先级只选择一个出来

比如A供应商对应2个销售组 我只想要他的AA销售组显示出来

IF(AA存在 销售组=AA,IF (BB存在 销售组 =BB, IF(CC 存在 销售组 =CC

最后一个供应商对应一个销售组

FineReport callie 发布于 2022-10-24 10:48
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-10-24 11:04

with table_t as(

select '供应商A' [供应商],'AA'[销售组]

union ALL

select '供应商A' [供应商],'BB'[销售组]

union ALL

select '供应商B' [供应商],'BB'[销售组]

union ALL

select '供应商B' [供应商],'CC'[销售组]

union ALL

select '供应商B' [供应商],'DD'[销售组]

)

SELECT * FROM (

SELECT *,ROW_NUMBER() OVER(PARTITION BY 供应商 ORDER BY (CASE WHEN 销售组='AA' THEN 0 WHEN 销售组='BB' THEN 1 WHEN 销售组='CC' THEN 2 WHEN 销售组='DD' THEN 3 ELSE 9999 END) ASC) [I] FROM table_t

) T WHERE T.I=1

image.png

  • callie callie(提问者) 我这有400多个供应商 这样是不是要写400多个WITH
    2022-10-24 11:08 
  • Z4u3z1 Z4u3z1 回复 callie(提问者) with()是生成的模拟数据。 你要写的是把case 里面的改成你要的取值顺序
    2022-10-24 11:12 
  • callie callie(提问者) 回复 Z4u3z1 好的谢谢
    2022-10-24 11:16 
  • 1关注人数
  • 254浏览人数
  • 最后回答于:2022-10-24 11:04
    请选择关闭问题的原因
    确定 取消
    返回顶部