本文不再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_field) FROM (l_table_name) INTO
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
后续会继续补充!