T-SQL查询帮助 - 基于IF / ELSE加入

时间:2012-11-26 03:22:01

标签: sql tsql conditional sap

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

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

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 

谢谢,我希望我试图解释这个问题。

2 个答案:

答案 0 :(得分:0)

对我来说,你会联合两个查询。您可能希望向两个查询添加一个字段,某种字面值作为哪个查询生成该行的标记。

答案 1 :(得分: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