簡體   English   中英

我怎樣才能把這個 sql 語句變成 abap 語句?

[英]How can i turn this sql statement into an abap statement?

Select knvp.KUNNR, kna1.NAME1, knvp.PARVW, knvp.KUNN2
from landing.kna1 kna1,
landing.knvp knvp,
(Select kna1.KUNNR, COUNT(knvp.KUNN2) as count
from landing.KNA1 kna1
, landing.KNVP knvp
where kna1.KUNNR = knvp.KUNN2
and kna1.KTOKD in('ZPYR', 'ZBPR')
group by kna1.kunnr
having count(knvp.kunn2) < 2)as orphans
where kna1.KUNNR = knvp.KUNNR
and knvp.KUNNR = orphans.KUNNR

基本上這一系列的 sql 語句在 kunnr 表類型上放置一個計數器,並顯示該表中只出現一次的所有數字。


SQL 語句的漂亮打印版本(此版本已附加 - 以防某些重要細節從漂亮打印機中丟失):

SELECT knvp.kunnr, 
       kna1.name1, 
       knvp.parvw, 
       knvp.kunn2 
FROM   landing.kna1 kna1, 
       landing.knvp knvp, 
       (SELECT kna1.kunnr, 
               Count(knvp.kunn2) AS count 
        FROM   landing.kna1 kna1, 
               landing.knvp knvp 
        WHERE  kna1.kunnr = knvp.kunn2 
               AND kna1.ktokd IN ( 'ZPYR', 'ZBPR' ) 
        GROUP  BY kna1.kunnr 
        HAVING Count(knvp.kunn2) < 2) AS orphans 
WHERE  kna1.kunnr = knvp.kunnr 
       AND knvp.kunnr = orphans.kunnr 




im starting with this

rowNum     col1    col2    col3     col4
1          1234     bp     name1    1234
2          1234     py     name1    1234
3          1223     bp     name2    1223
4          1245     py     name3    1245
5          5432     py     name4    4432

i want to delete row# 1 and 2 because they have the same col1# but
different col2#

result:

rowNum     col1    col2    col3     col4
1          1223     bp     name2    1223
2          1245     py     name3    1245
3          5432     py     name4    5432

你可以試試

SELECT knvp~kunnr
       kna1~name1
       knvp~parvw
       knvp~kunn2
FROM kna1 JOIN knvp ON kna1~kunnr = knvp~kunnr
INTO TABLE lt_some_table_with_matching_structure
WHERE knvp~kunnr IN ( SELECT kna1~kunnr
                      FROM kna1 JOIN knvp ON kna1~kunnr = knvp~kunn2
                      WHERE ( kna1~ktokd = 'ZPYR' OR kna1~ktokd = 'ZBPR' )
                      GROUP BY kna1~kunnr
                      HAVING COUNT( DISTINCT knvp~kunn2 ) < 2 ).

但請注意,這主要是猜測,因為我根本不明白查詢應該做什么。

編輯:根據您的評論中的附加信息,您可能想嘗試這樣的事情:

DATA: lt_partners TYPE TABLE OF kunnr. " unsure whether this is the correct type

SELECT kunnr 
  FROM kna1
  INTO TABLE lt_partners
  WHERE ( kna1~ktokd = 'ZPYR' OR kna1~ktokd = 'ZBPR' ).
  " AND probably some other filter criteria
SORT lt_partners.
DELETE ADJACENT DUPLICATES FROM lt_partners. " avoid DISTINCT if you can to take load off the database

IF lt_partners IS NOT INITIAL.
  SELECT knvp~kunnr
         kna1~name1
         knvp~parvw
  FROM kna1 JOIN knvp ON kna1~kunnr = knvp~kunnr
  INTO TABLE lt_some_table_with_matching_structure
  FOR ALL ENTRIES IN lt_partners
  WHERE knvp~kunn2 = lt_partners-table_line
  GROUP BY knvp~kunnr kna1~name1 knvp~parvw
  HAVING COUNT( DISTINCT knvp~kunn2 ) < 2.
ENDIF.

請注意,您不能在此步驟中選擇 KNVP~KUNN2,因為您必須將其包含在 GROUP BY 子句中,然后 HAVING 子句將不起作用。 (我現在沒有可用的系統,所以再次,這是猜測......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM