SELECT相关 - 海边星
【原创】 SELECT相关
栏目:ABAP  作者:在海边看星星  阅读:(1498)
1.SELECT MAX
      按物料号matnr 工厂werks 取日期最近的采购订单的供应商数据

      SELECT ekpo~ebeln
        ebelp
        lifnr
        matnr
        werks
        ekko~aedat
        INTO TABLE lt_ekpo
        FROM ekpo JOIN ekko ON ekko~ebeln = ekpo~ebeln
        FOR ALL ENTRIES IN stb
        WHERE matnr = stb-idnrk
          AND werks = stb-werks.
          AND ekko~aedat IN ( SELECT MAX( ekko~aedat ) FROM ekko
                               JOIN ekpo ON ekko~ebeln = ekpo~ebeln
                               WHERE matnr = stb-idnrk
                                 AND werks = stb-werks
                               GROUP BY matnr werks ).

2.关联内表写select

      SELECT
      a~vbeln         , "销售订单号
      a~auart         , "订单类型
      a~vkorg         , "销售组织
      a~vtweg         , "分销渠道
      a~spart         , "产品组
      a~kunnr         , "售达方
      c~bstkd         , "客户合同号
      c~bstdk         , "客户合同签署日期
      a~bname         , "导远合同号
      c~bstkd_e       , "借用/赠送单据编号
      a~audat         , "需求日期
      a~vdatu         , "交货日期
      c~zterm         , "付款条件
      a~augru         , "订单原因
      a~vkgrp         , "销售员
      a~zztxt         , "文本
      a~netwr         , "不含税总价
      a~ernam         , "创建人
      a~erdat         , "创建日期
      a~zzpl          , "普票/专票
      a~knumv         , "凭证条件号
      a~objnr         , "凭证条件号
      b~posnr         , "行项目
      b~matnr         , "物料编码
      CASE WHEN a~auart = 'ZCR' OR a~auart = 'ZDR'  THEN b~zmeng
           ELSE b~kwmeng
      END AS kwmeng   , "订单数量
      b~waerk         , "货币
      b~netwr AS netwr2   , "行项目的净值
      b~mwsbp         , "税额
      d~kbetr         , "含税单价
      d~kkurs         , "定价汇率
      d~kpein         , "定价单位
      b~vrkme         , "销售单位
      b~werks         , "工厂
      b~abgru         , "拒绝原因
      e~edatu         , "首个交货日期
      b~taxm1         , "税分类
      b~zzglh         , "借用转销售单号
      b~zzghh         , "借用转销售行号
      f~vtext AS vkorg_text,
      g~vtext AS vtweg_text,
      h~vtext AS spart_text,
      i~name_org1 AS kunnr_text,
      j~vtext AS zterm_text,
      k~bezei AS vkgrp_text,
      l~ddtext AS zzpl_text,
      m~maktx AS matnr_text,
      n~name1 AS werks_text,
      o~bezei AS vbeln_text,
      
      CASE WHEN a~auart = 'ZCR' OR a~auart = 'ZDR' THEN CASE WHEN d~kpein <> 0 THEN ( ( CAST( d~kbetr AS FLTP ) /  CAST( d~kpein AS FLTP ) ) * CAST( b~zmeng AS FLTP ) )
                                                        END
           ELSE CASE WHEN d~kpein <> 0 THEN ( ( CAST( d~kbetr AS FLTP ) /  CAST( d~kpein AS FLTP ) ) * CAST( b~kwmeng AS FLTP ) )
                END
      END AS total
      FROM @lt_vbak AS a
      INNER JOIN vbap AS b ON b~vbeln  = a~vbeln
      LEFT JOIN vbkd AS c ON c~vbeln = b~vbeln
      LEFT JOIN prcd_elements AS d ON d~knumv = a~knumv
                                  AND d~kposn = b~posnr
                                  AND d~kschl = 'PR01'
                                  AND d~kinak <> 'X'
      LEFT JOIN vbep AS e ON e~vbeln = b~vbeln
                         AND e~posnr = b~posnr
                         AND e~lfrel <> ''
      LEFT JOIN tvkot AS f ON f~vkorg = a~vkorg
                          AND f~spras = '1'
      LEFT JOIN tvtwt AS g ON g~vtweg = a~vtweg
                          AND g~spras = '1'
      LEFT JOIN tspat AS h ON h~spart = a~spart
                          AND h~spras = '1'
      LEFT JOIN but000 AS i ON i~partner = a~kunnr
      LEFT JOIN tvzbt AS j ON j~zterm = c~zterm
                          AND j~spras = '1'
      LEFT JOIN tvgrt AS k ON k~vkgrp = a~vkgrp
                          AND k~spras = '1'
      LEFT JOIN dd07t AS l ON l~domname = 'ZDZPL'
                          AND l~domvalue_l = a~zzpl
                          AND l~ddlanguage = '1'
      LEFT JOIN makt AS m ON m~matnr = b~matnr
                          AND m~spras = '1'
      LEFT JOIN t001w AS n ON n~werks = b~werks
      LEFT JOIN tvakt AS o ON o~auart = a~auart
                           AND  o~spras = '1'
      INTO TABLE @DATA(lt_salesorder).

3.SELECT SUM
SUM的时候不能用FOR ALL ENTRIES IN
      SELECT kalnr curtp categ ptyp process meins xkdm_nact waers
                  SUM( prd )   AS prd
                  SUM( kdm )   AS kdm
                  SUM( quant ) AS quant
                  SUM( stval ) AS stval
                  SUM( altval ) AS alttval
                  SUM( markup ) AS markup
        FROM mldoc  INTO CORRESPONDING FIELDS OF TABLE lt_mldoc_sum
        WHERE curtp   = '10'
*     AND rldnr IN mt_ledger
*     AND runref in MT_runref
          AND kalnr IN lr_kalnr
          AND ( jahrper = l_jahrper   OR
                jahrper < l_jahrper AND jahrper >= l_jahrper AND xabr = space )
          AND categ = 'VN'
          AND ( posart NOT IN lt_posart OR posart IN lt_posart AND jahrper_wip = l_jahrper )
*     AND timestamp <= mv_max_timestamp
        GROUP BY kalnr curtp categ ptyp process meins xkdm_nact waers.
        
        
 "在sum里面加条件       
  SELECT werks,
    matnr,
    SUM( CASE shkzg
           WHEN 'S' THEN menge
           WHEN 'H' THEN ( -1 * menge )
         END  ) AS menge
    INTO TABLE @DATA(lt_aufm_sum)
    FROM aufm
    WHERE werks IN @s_werks
      AND matnr IN @s_matnr
      AND budat IN @lr_budat
  GROUP BY werks, matnr.
  SORT lt_aufm_sum BY werks matnr.        
        
        
        
        
4.判断某几位字符substring
      SELECT
      a~matnr         , "物料编码
      b~werks         , "工厂
      a~mtart         , "物料类型
      a~matkl         , "物料组
      a~meins         , "基本单位
      a~labor         , "物料状态
      a~ntgew         , "净重
      a~gewei         , "重量单位
      b~maabc         , "物料等级
      a~mstde AS zstad, "有效期
      a~mstae AS mmsta, "有效期状态
      b~beskz         , "采购类型
      b~bstrf         , "舍入值
      b~rgekz         , "反冲
      b~lgpro         , "生产仓储地点
      b~lgfsb         , "采购仓储地点
      b~dispo         , "MRP控制者
      a~mhdhb         , "总货架寿命
      a~xchpf           "批次管理
      FROM mara AS a
      INNER JOIN marc AS b ON b~matnr = a~matnr
      INNER JOIN @lt_cdhdr AS c ON substring( c~objectid,1,40 )  = a~matnr
      WHERE b~werks IN @s_werks
      INTO TABLE @DATA(lt_mara_marc).
      

5.从内表读取数据
  SELECT DISTINCT
  matnr,
  werks
  FROM @lt_mdkp AS a
  INTO TABLE @lt_matnr_werks.




我的评论
昵称
邮箱
域名
  记住 通知博主
验证码

  联系我们

微信扫一扫

 登录  打赏

  随机文章