如何将此sql语句转换为abap语句?

如何将此sql语句转换为abap语句?,abap,opensql,Abap,Opensql,基本上,这一系列sql语句在KUNR表类型上放置一个计数器,并显示该表中只显示一次的所有数字 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 ,

基本上,这一系列sql语句在KUNR表类型上放置一个计数器,并显示该表中只显示一次的所有数字

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
你可以试试

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 ).
请注意,在此步骤中不能选择KNVP~KUNN2,因为必须将其包含在GROUPBY子句中,否则HAVING子句将不起作用。
我现在没有可用的系统,所以这也是猜测…

我可以想象,这是可能的,但是通常用一系列select命令和一些额外的变量来存储中间结果更容易解决。好的,你能给我举个例子吗?我是abap编程新手,我只编程了大约一个月。当你只想要一个abap响应时,为什么要用mysql和sql server来标记这个?我真的不知道sql语句的作用。我本来想请人解释一下它在做什么,但现在还没问。我可以告诉你它是干什么的——把所有试图破译它的人都弄糊涂了-它帮助了我,但是它给了我和我一样的代码结果……那么?我以为你希望它返回相同的结果?还是我误解了你的评论?这很有帮助,但它给了我与我相同的代码结果。这是拉和比较正确的数据,但没有给我的结果,我在寻找。我想用某种计数器来计算有一个搭档的KUNR。对于那些有一个合作伙伴连接到它的人,打印该kunnr。我现在得到的信息都是KUNR,有两个合作伙伴连接到他们身上,我试图找到一种方法,只要找出KUNR,有一个合作伙伴连接到他们身上。我正在努力让它工作,我会让你知道它是如何工作的。你好,vwegert,我尝试了这个解决方案和解决方案的一个修改部分,但它仍然没有给我我想要的答案,我想我会说明我从什么开始,我想用什么结束。
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.