SQL 中的 If/Else 问题以获取有效值

If/Else problem in SQL to get valid value

提问人:Ichichaa 提问时间:5/31/2023 最后编辑:Ichichaa 更新时间:5/31/2023 访问量:76

问:

我想从 VBFA 表中获取 VBELN 字段。 但是为了获得有效值,我需要遵循以下逻辑:


Get VBFA where FPLTR = ZTB_Driver-FPLTR AND FPLNR = ZTB_Driver-FPLNR

SUM VBFA-RFWRT
IF VBFA-RFWRT = 0 THEN VBELN = space
ELSE VBELN = VBFA-VBELN

为了获得有效的 VBELN 值,我需要从 VBFA 表中获取行,其中 FPLNR 和 FPLTR 字段与表中的 FPLNT 和 FPLTR ZTB_DRIVER值相同。 VBLEN 可能有重复的行,所以我需要对 RFWRT 字段求和。 如果结果为 0,则 VBELN 将为空格/空。 如果结果不为 0,则 VBELN 值与 VBFA-VBELN 中显示的值相同。

对于此逻辑:

Get VBFA where FPLTR = ZTB_Driver-FPLTR AND FPLNR = ZTB_Driver-FPLNR

我已经这样做了:

SELECT * FROM VBFA a
JOIN ZTB_Driver b ON a.FPLTR = b.FPLTR AND a.FPLNR = b.FPLNR

但是,我对这个逻辑有困难:

SUM VBFA-RFWRT
IF VBFA-RFWRT = 0 THEN VBELN = space
ELSE VBELN = VBFA-VBELN

我在这里附上了示例输入和预期输出

在SQL查询中转换此逻辑的方法是什么? 我真的很感激任何意见。 谢谢!

解决!

SELECT c.VBELN,
   CASE WHEN SUM(RFWRT) = 0 THEN ' '
   ELSE VBELN
   END AS VBELN_2
   FROM (
         SELECT a.* FROM VBFA a
         JOIN ZTB_Driver b ON a.FPLTR = b.FPLTR AND a.FPLNR = b.FPLNR) c
GROUP BY c.VBELN
SQL IF-语句 azure-databricks

评论

0赞 Rakesh Govindula 5/31/2023
您能提供您的样本输入和预期输出吗?
0赞 Ichichaa 5/31/2023
嘿@RakeshGovindula,谢谢你检查我的问题。我已经附上了我的数据样本。谢谢。
0赞 Rakesh Govindula 5/31/2023
这里ZTB_Driver什么,它的价值是什么。并且您已经添加了示例输入数据,也添加了预期的输出。
0赞 Ichichaa 5/31/2023
@RakeshGovindula ZTB_Driver 是另一个表,用于在 VBFA 表中获取 VBELN 的参考。ZTB_Driver 和 VBFA 表都有 VBELN、FPLNR 和 FPLTR。如果两个表具有相似的 FPLNR 和 FPLTR 值,则我们将从两个表中获取相似的 VBELN 值,但我们只会从 VBFA 表中获取 VBELN。预期的输出在同一个文件、不同的工作表中。
0赞 Adrian Maxwell 6/1/2023
我投票结束这个问题,因为声明已解决(有问题)

答: 暂无答案