格式化搜索-2个表中的值

2020-09-02 07:37发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


所有人,

我刚接触SAP(使用SAP和SQL大约需要2-3个月),我想知道您是否可以帮助我,或者有人可以提供一些建议。

我需要在销售订单上执行格式化搜索,以在2个表(QUT1和OITM)中查找值。 首先,它应该查询QUT1,如果该值为null或不符合条件,则应从OITM中获取它。 我提出了两个不同的查询:

选择(COALESCE(CASE(案例),当T1时。" U_ItemDesc_2"为NULL


T0时。" FrgnName"

ELSE
T1 。"" U_ItemDesc_2"

END AS varchar),''))AS" Item Descr 2 Joined"来自OITM T0左外连接QUT1 T1 ON T0。" ItemCode" = T1。" ItemCode" WHERE T0。" ItemCode" = $ [$ 38.1.0]和T1。" ItemCode" = $ [$ 38.1.0]

此查询仅显示QUT1中的内容,并且如果该值为null或不满足条件,则不显示OITM中的值。

第二个查询:

从" SBO_JUMEL"中选择COALESCE(NULLIF(T0。" U_ItemDesc_2","),T1。" FrgnName")。" QUT1" T0右联接" SBO_JUMEL"。" OITM" T1接通T0。" ItemCode" = T1。" ItemCode"在T0上的内部联接T2。" DocEntry" = T2。" DocEntry" WHERE T2。" DocStatus" ='O'AND T0。" ItemCode" = $ [$ 38.1.0]和T1。" ItemCode" = $ [$ 38.1.0]按T2排序。" DocTime" ASC

此查询是相同的,如果QUT1值为null,则仍然不显示OITM字段中的值。

有人使用过这种格式的搜索并且可以给出一些指示吗? 任何帮助将不胜感激

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


所有人,

我刚接触SAP(使用SAP和SQL大约需要2-3个月),我想知道您是否可以帮助我,或者有人可以提供一些建议。

我需要在销售订单上执行格式化搜索,以在2个表(QUT1和OITM)中查找值。 首先,它应该查询QUT1,如果该值为null或不符合条件,则应从OITM中获取它。 我提出了两个不同的查询:

选择(COALESCE(CASE(案例),当T1时。" U_ItemDesc_2"为NULL


T0时。" FrgnName"

ELSE
T1 。"" U_ItemDesc_2"

END AS varchar),''))AS" Item Descr 2 Joined"来自OITM T0左外连接QUT1 T1 ON T0。" ItemCode" = T1。" ItemCode" WHERE T0。" ItemCode" = $ [$ 38.1.0]和T1。" ItemCode" = $ [$ 38.1.0]

此查询仅显示QUT1中的内容,并且如果该值为null或不满足条件,则不显示OITM中的值。

第二个查询:

从" SBO_JUMEL"中选择COALESCE(NULLIF(T0。" U_ItemDesc_2","),T1。" FrgnName")。" QUT1" T0右联接" SBO_JUMEL"。" OITM" T1接通T0。" ItemCode" = T1。" ItemCode"在T0上的内部联接T2。" DocEntry" = T2。" DocEntry" WHERE T2。" DocStatus" ='O'AND T0。" ItemCode" = $ [$ 38.1.0]和T1。" ItemCode" = $ [$ 38.1.0]按T2排序。" DocTime" ASC

此查询是相同的,如果QUT1值为null,则仍然不显示OITM字段中的值。

有人使用过这种格式的搜索并且可以给出一些指示吗? 任何帮助将不胜感激

付费偷看设置
发送
5条回答
南山jay
1楼 · 2020-09-02 08:11.采纳回答

如果其他人需要此解决方案:)

在$ [POR1.ItemCode]时选择大小写<>''然后在$ [POR1.BaseEntry] <>时选择大小写,然后$(POR1.BaseLine] <>''然后选择(T2。" U_ItemDesc_2" 从PQT1 T2,其中CAST(T2。" DocEntry" AS VARCHAR)= $ [POR1.BaseEntry]和CAST(T2。" LineNum" AS VARCHAR)= $ [POR1.LineNum])<>"然后(选择T2。" 从PQT1 T2发送U_ItemDesc_2",其中CAST(T2。" DocEntry" AS VARCHAR)= $ [POR1.BaseEntry]和CAST(T2。" LineNum" AS VARCHAR)= $ [POR1.LineNum])ELSE T0。" U_Description2" END ELSE T0。" U_Description2"结束于OITM T0左外连接PQT1 T1在T0上。" ItemCode" = T1。" ItemCode" WHERE T0。" ItemCode" = CAST($ [P [POR1.ItemCode] AS VARCHAR)

# p#

我已经对其进行了一点修改,因此它不会引发错误:

选择

案例

当T1。" U_ItemDesc_2"为NULL或T1。" U_ItemDesc_2" ="然后T0。" FrgnName" ELSE T1。" U_ItemDesc_2" END

从OITM T0内部联接QUT1 T1到T0。" ItemCode" = T1。" ItemCode"

其中T0。" ItemCode" = $ [RDR1.ItemCode]和T1。" DocEntry" = $ [RDR1.BaseEntry]和T1。" LineNum" = $ [RDR1.LineNum]

但是,如果QUT1中没有基于where条件的值,则不允许从OITM中提取值

昵称总是被占用
2楼-- · 2020-09-02 08:29

嗨,保罗,

您的查询有很多错误,那么从哪里开始呢? 首先,我要为您的努力表示赞赏。

快速答案并不能为您提供一个很好的解决方案:切换FROM子句,以便从" 后退"表格。 然后使用LEFT OUTER联接,您将从QUT1表中获得一个值或NULL,这将使COALESCE函数正常工作。

 FROM OITM T1
      左外联接QUT1 T0 ON T1.ItemCode = T0.ItemCode
      左外部联接OQUT T2 ON T0.DocEntry = T2.DocEntry 

但是,由于可以(在技术上)在一个报价中多次输入一个项目,并且可以同时打开多个报价,因此查询 照原样,变得非常不稳定。 仅当那时只有一个给定物料处于打开状态的报价时,它才有效。

假定您从报价中绘制销售订单(使用复制到按钮 在"报价"表单上或"订单"表单上的"复制" 按钮上),您可以将订单绑定到其特定的报价:

 SELECT COALESCE(NULLIF(NULLIF(T1。[  U_ItemDesc_2],"),''),T0。[FrgnName],'Aaargh')
 从OITM T0
           左外联接QUT1 T1接通T0.ItemCode = T1.ItemCode
 T0.ItemCode = $ [RDR1.ItemCode]
      AND T1.DocEntry = $ [RDR1.BaseEntry]
      AND T1.LineNum = $ [RDR1.LineNum]
 

致谢

Johan

P.S。 感谢您教我有关NULLIF函数的知识。 我还不知道那个。 非常有用。

风早神人
3楼-- · 2020-09-02 08:08

嗨,约翰,

非常感谢您抽出宝贵时间调查我的问题。 非常感激。 我已经实现了您的解决方案,我必须说,它比我想出的要好得多:)。 该查询解决了我一半的问题。 现在,我找到了一种方法来查看OITM并从中提取值(如果QUT1中没有匹配项)。 我可以想象用CASE构建查询将是实现此目的的方法吗?

再次,比您非常需要您的帮助

路亽曱_Ryan
4楼-- · 2020-09-02 08:12

您好,

尝试此查询,它应该对您有用,

< p> SELECT

当ISNULL(T1。[U_ItemDesc_2],'')=''时为T0。[FrgnName]否则T1。[U_ItemDesc_2]结尾

OITM T0内部联接QUT1 T1到T0。[ItemCode] = T1。[ItemCode]

WHERE T0。[ItemCode] = $ [$ 38.1.0]和T1。[ DocEntry] = $ [$ 38.45.0]和T1。[LineNum] = $ [$ 38.46.0]

问候,

Nagarajan

悻福寶寶
5楼-- · 2020-09-02 08:09
< p>有人可以帮我吗?

选择

案例

当ISNULL(T1。" U_ItemDesc_2",'')=``然后T0。" FrgnName"

ELSE

(SELECT CAST(T1。" U_ItemDesc_2"从QUT1 T1转到T1。" ItemCode" = $ [RDR1.ItemCode] AND T1。" DocEntry" = $ [RDR1.BaseEntry]和T1。" LineNum" = $ [ RDR1.LineNum]))END

从OITM T0左外部联接QUT1 T1到T0。" ItemCode" = T1。" ItemCode"

我收到" FROM附近的语法不正确"错误。 查询应在QUT1中查找基于ELSE条件的值,如果没有,则从OITM中提取值。

一周热门 更多>