ABAP最基础也最重要的语句之 select语句!讲述这些年来遇到的一些小问题!

来源:互联网 发布:淘宝ifashion如何申请 编辑:程序博客网 时间:2024/05/22 10:45

本文不再copy前人们累积的select的用法等文章,旨在把这些年从初学者开始接触select语句所遇到的问题和解决办法写在这,一是帮助自己累积,二是希望可以供大家参考,有错的请拍砖,欢迎查错补漏!


1、select里面用for all entries in itab 语句的话在之前要先对这个内表进行if itab is initial的判断!


2、select  bukrs  gjarh  

      INTO CORRESPONDING FIELDS OF TABLE LT_DATA

      注意这样的写法,要放足够的字段去判别每一条数据是否一样,否则就会导致本来要抓两条数变成只抓到一条。

      例如如果有两条数据:   a     b      c     e 和a    b     d   e  如果只select前面两个字段,最终抓出来的结果就只有一个!


3、select 里面的and or嵌套例子:  

SELECT VBELN
           POSNN AS POSNR
           VBELV
           POSNV
      FROM VBFA
      INTO TABLE IT_VBFA
      FOR ALL ENTRIES IN I_IT_SEARVBRK
      WHERE  VBELN   = I_IT_SEARVBRK-VBELN
        AND  POSNN   = I_IT_SEARVBRK-POSNR
        AND ( VBTYP_V = 'C'
         OR   VBTYP_V = 'K'
         OR   VBTYP_V = 'L' )
        AND  VBELV   IN S_VBELN
        AND  POSNV   IN S_POSNR.


4、where条件的一些用法:

     between的用法:    where  bldat   between   a    and    b

     包含某个字符的where用法:      ‘%abc%'    字符串里面包含abc

                                                               ’%abc‘       字符串往右包含abc

                                                               ’abc%‘       字符串往左包含abc

    in的用法:                可以是in   s_bukrs(选择屏幕),也可以是 in ('3001','3002')表示可以为3001到3002之间



5、也可以单独抓某个字段放进一个变量里面的:

      select single bukrs

      into l_bukrs


      select single bukrs vbeln

      into  (l_burks, l_vbeln)



6、join的用法:


SELECT mkpf~mblnr mkpf~mjahr mseg~zeile mkpf~budat mkpf~xblnr
         mseg~matnr mseg~rsnum mseg~rspos mseg~menge mseg~smbln
         mseg~sjahr mseg~smblp mseg~bwart mseg~werks mkpf~bktxt
         FROM mkpf JOIN mseg
                ON mkpf~mblnr mseg~mblnr
                AND mkpf~mjahr mseg~mjahr
         INTO CORRESPONDING FIELDS OF TABLE imseg
         WHERE mkpf~budat BETWEEN st_date AND sy-datum )
           AND mkpf~mblnr GE cs_mblnr
           AND mkpf~mjahr GE st_year
           AND mseg~werks IN werks
           AND mseg~rsnum NE space
           AND mseg~bwart 'Z33' AND mseg~shkzg 'S' )
                OR mseg~bwart 'Z34' AND mseg~shkzg 'H' ).



7、SELECT语句里面的where条件,放空和 = ' '注意是不一样的,如果select的时候需要用到一条索引,但是里面的某个字段你是不需要输入的,这个时候你就要定义一个选择屏幕变量,这个可以作为不显示出来或者是自己通过renge定义的,然后放到where里面。


8、Between语句在where条件的使用

       L_DAT WA_BSIS1-BLDAT 75.
       L_DAT1 WA_BSIS1-BLDAT 10.

       SELECT BUKRS KUNNR VBELN BLDAT BELNR DMBTR
       INTO CORRESPONDING FIELDS OF TABLE IT_BSID
       FROM BSID
       WHERE BUKRS 'JP01'
       AND   KUNNR WA_ZJPVTU-ZKUNNR
       AND   VBELN NE ' '
       AND   BLDAT BETWEEN L_DAT AND L_DAT1.


9、抓取vbak表里面1开头的so:

select * form vbak into table where vbeln like '1%'.

或者是煮出来之后再判断:

if vbak-vbeln(1) eq '1'.


10、强制使用索引(不建议使用):



11、用变量代替field,table和where条件:

其中变量都定义成string。

SELECT (l_fieldFROM (l_table_nameINTO  <datarow> WHERE (l_where).


12、select endselect转换成for all enterny的时候,抓出的数据不一致。

当select的字段不满足表的key字段的时候,数据会有不一致,例如:

A B C D   1  2  3

A B C E    1 2  3

表里面有着两条数据,然后抓数据的时候,只抓了A B C  1 2 3这六个字段,这个时候,抓出来的两条数据就会变成1条。


13、抓取某个表里面某个字段A最大的时候的,B的值:


14、inner join,left join, right join:

http://blog.sina.com.cn/s/blog_8b018e6f0101a3s3.html



后续会继续补充!

原创粉丝点击