1

我正在尝试使用 SQL 查找 SAP 中文章的零售价,但文章的性质意味着当前价格可以针对父母或孩子。判断我需要加入哪个字段的唯一方法是某个字段是否包含值。

我有 2 个单独的查询,但我确实需要 1 个结果集中的结果。

MATNR 是文章编号,而 M.PMATN 是父母文章编号。如果 M.PMATN 字段为空,那么我想像 M.MATNR = A.MATNR 上的查询 #1 一样加入,但如果 M.PMATN 不为空,那么我想使用该字段中的值作为 M. PMATN = A.MATNR

查询 #1- 不存在父文章编号,因此使用文章编号 = 文章编号从文章本身获取价格:

SELECT A.MANDT, A.VKORG, A.VTWEG, A.MATNR, M.PMATN, K.KBETR, A.DATAB, A.DATBI FROM pdp.KONP AS K
INNER JOIN pdp.A073 AS A ON
    A.KNUMH = K.KNUMH
INNER JOIN pdp.MVKE AS M ON
    M.VKORG = M.VKORG
    AND M.VTWEG = A.VTWEG AND M.MATNR = A.MATNR
      WHERE A.MANDT = '510' 
AND A.VKORG = '1010'
AND A.VTWEG ='D1'
AND GETDATE() < A.DATBI
AND GETDATE() > A.DATAB 
AND M.PMATN = ''

查询 #2 - 字段中存在父文章编号,因此将其与文章连接以从父文章中查找价格:

SELECT distinct A.MANDT, A.VKORG, A.VTWEG, A.MATNR, M.PMATN, K.KBETR, A.DATAB, A.DATBI FROM pdp.KONP AS K
INNER JOIN pdp.A073 AS A ON
    A.KNUMH = K.KNUMH
INNER JOIN pdp.MVKE AS M ON
    M.VKORG = M.VKORG
    AND M.VTWEG = A.VTWEG AND M.PMATN = A.MATNR
WHERE A.MANDT = '510' 
AND A.VKORG = '1010'
AND A.VTWEG ='D1'
AND GETDATE() < A.DATBI
AND GETDATE() > A.DATAB 

谢谢,我希望我试图解释这一点有某种意义。

4

2 回答 2

0

在我看来,你会联合这两个查询。您可能希望向两个查询添加一个字段,将某种文字值作为生成该行的查询的标记。

于 2012-11-26T03:26:38.610 回答
0

我还没有运行这个查询,但我认为这应该可以工作。

SELECT distinct A.MANDT, A.VKORG, A.VTWEG, A.MATNR, M.PMATN, K.KBETR, A.DATAB, A.DATBI FROM pdp.KONP AS K
INNER JOIN pdp.A073 AS A ON
    A.KNUMH = K.KNUMH
INNER JOIN pdp.MVKE AS M ON
    M.VKORG = M.VKORG
    AND M.VTWEG = A.VTWEG AND (((M.PMATN = A.MATNR) AND M.PMATN IS NOT NULL) OR ((M.MATNR = A.MATNR) AND M.PMATN IS NULL))
WHERE A.MANDT = '510' 
AND A.VKORG = '1010'
AND A.VTWEG ='D1'
AND GETDATE() < A.DATBI
AND GETDATE() > A.DATAB 
于 2012-11-26T03:31:48.303 回答