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
答案 0 :(得分:3)
你可以尝试
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子句将不起作用。 (我现在没有可用的系统,所以再一次,这是猜测......)