工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(3)

简介: 在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分:1.SELECT result 部分2.FROM source 部分3.INTO target 部分

ORDER BY

用于按 fields 指定的字段进行由小到大的排序,也可以使用主键 PRIMARY KEY 进行排序,这种情况再表连接和视图查询时不能使用:

SELECT carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_sflight
  ORDER BY PRIMARY KEY.


它还可以以升序或降序对其他列进行排序,通过加上 ASCENDING 或者 DESCENDING :

SELECT carrid connid planetype
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_sflight
  ORDER BY planetype ASCENDING.


UP TO ROWS

UP TO (natural number) ROWS 用来增加一个限制:来限定可以被查询到的行数。如下,限定 10 行:

SELECT carrid connid planetype
  UP TO 10 ROWS
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_sflight.


FOR ALL ENTRIES

FOR ALL ENTRIES 可以在两个表的情况下,我们想根据第一个表的字段,从第二个表中获取数据。

SELECT carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF gt_sflight
  WHERE planetype = '747-400'.
IF gt_sflight IS NOT INITIAL.
  SELECT carrid connid counryfr cityfr airpfrom countryto
    FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE gt_spfli
    FOR ALL ENTRIES IN gt_sflight
    WHERE carrid = gt_sflight-carrid
    AND carrid = gt_sflight-connid.
ENDIF.

在第一条 SELECT 语句中,我们得到了关于 carrid 和 connid 的数据,但是只有当 planetype 是 '747-400'。在第二个表中,由于我们没有 planetype ,我们只能得到我们想要的行。


在使用 FOR ALL ENTRIES 时,我们需要记住的一件事是,我们需要在执行带有 FOR ALL ENTRIES 的 SELECT 之前,要检查使用该表的表是否为空。


如果表是空的,在这个例子中,所有的记录都将从 spfli 表中获得。

子查询


子查询可以在 WHERE 条件中使用,直接从另一个表中获得最大值。例如,在使用 SUBQUERY 时,可以增加以下内容:

  • ALL | ANY | SOME
  • EXIST
  • IN


如果,我们想预定一个价格最高的航班,可以使用如下代码:

SELECT *
  FROM sflight
  INTO CORRESPONDING FIELDS OF gt_sflight
  WHERE price = ( SELECT MAX( price ) FROM sflight ).


JOIN

如果我们在许多表中进行查询,就不得不用上 JOIN 语句,ABAP 中有两种类型的连接在数据库表中进行数据查询:

  • INNER JOIN:  内连接需要在第二个表中提取带有一个表的主键的条目到一个内部表中。
  • OUTER JOIN:外连接不管第二张表中是否有条目存在,仍然是从第一个表中提取数据。


INNER JOIN 代码示例:

SELECT
        KNA1~KUNNR
        KNA1~NAME1
        KNA1~NAME2
        KNA1~SORTL
        KNA1~LAND1
        KNA1~REGIO
        KNA1~ADRNR
        KNA1~KTOKD
        KNA1~ERDAT
        KNA1~ERNAM
        KNVV~VKORG
        KNVV~VTWEG
        KNVV~BZIRK
        KNVV~VKBUR
        KNVV~VKGRP
        KNVV~WAERS
        KNVV~KTGRD
        KNVV~ZTERM
        KNVV~KDGRP
        KNVV~INCO1
        KNVV~INCO2
      FROM  KNA1
       INNER JOIN KNVV ON KNA1~KUNNR EQ KNVV~KUNNR
      INTO CORRESPONDING FIELDS OF TABLE GT_OUT.


OUT JOIN 代码示例:

SELECT
      KNA1~KUNNR
      KNA1~NAME1
      KNA1~NAME2
      KNA1~SORTL
      KNA1~LAND1
      KNA1~REGIO
      KNA1~ADRNR
      KNA1~KTOKD
      KNA1~ERDAT
      KNA1~ERNAM
      KNB1~BUKRS
      KNA1~AUFSD
      KNA1~LIFSD
      KNA1~FAKSD
      KNB1~AKONT
      KNB1~ZTERM
      SKAT~TXT50
    FROM  KNA1
    INNER JOIN KNB1 ON KNA1~KUNNR = KNB1~KUNNR
    LEFT OUTER JOIN SKAT ON KNB1~AKONT = SKAT~SAKNR AND SKAT~KTOPL = 'HM00' AND SKAT~SPRAS = SY-LANGU
    INTO CORRESPONDING FIELDS OF TABLE GT_OUT.


总结

至此,本文总结了跟在 SELECT 语句后的条件。ABAP 中有很多方便查询的操作,比如:WHEREGROUPORDERFOR ALL ENTRIES 等等,希望对你帮助。

相关文章
SAP ABAP 程序调用设置成后台作业模式
ABAP 程序调用设置成后台作业模式
530 0
|
XML JSON 监控
《李斌的笔记》SAP 全部文章目录、快速导航、持续更新
我把自己的全部文章都整理成目录,放在这篇文章中以实现快速导航,这样更方便阅读,本章内容持续更新。
296 0
|
SQL
SAP ABAP-OPENSQL-数值函数简介
S4中针对OPENSQL新提供一些函数
144 0
|
SQL
SAP ABAP-OPENSQL-字符串函数介绍
S4中SQL新语法字符串函数
219 0
|
SQL
SAP ABAP-OPENSQL-日期/时间戳函数
S4提供针对OPENSQL一些新的SQL函数调用,本文展示相关函数的使用
691 0
SAP ABAP-删除工序示例代码
ABAP-删除工序示例代码
176 0
SAP MM/FI_运费处理方式
常见的采购运费处理方式
SAP MM 途损处理方式
通常客户采购业务需求提到货物运输有损耗,需要针对此业务给出合理方案输出,下面笔者针对此类业务分析下各种实现方案的可行性!
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?