![](/img/trans.png)
[英]How to join the following 3 tables with exactly one ABAP SQL statement
[英]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.