martes, 16 de agosto de 2011

Select

*-- Cuando queremos guardar el contenido de una tabla de la BD a una tabla interna:

SELECT * INTO TABLE ti_vbrk
FROM vbrk
WHERE bukrs IN p_bukrs
  AND fkdat IN p_fkdat
  AND kunag IN p_kunag
  AND vbeln IN p_vbeln.

*-- Para seguir añadiendo registros en una tabla interna sin borrar los que hay:

SELECT * APPENDING TABLE ti_bsid
FROM bsid
WHERE kunnr = ti_write-kunnr2
  AND bschl = '01'
  AND bldat <= fecha_b-high.



*-- Cuando queremos coger campos sueltos de una tabla de la BD a unas variables:

SELECT SINGLE werks aubel
INTO (v_werks, v_aubel)
FROM vbrp
WHERE vbeln = ti_vbrk-vbeln.



*-- Como recuperar el nombre de usuario:

SELECT SINGLE *
FROM usr21
WHERE bname = v_ernam.

SELECT SINGLE name_text
INTO  v_nombre
FROM  adrp
WHERE persnumber = usr21-persnumber.



*-- Para sacar la cantidad de registros que hay en la selección utilizamos COUNT

SELECT COUNT( * ) INTO v_number1
FROM  bsid
WHERE kunnr = ti_write-kunnr2
  AND bschl = '01'
  AND bldat <= fecha_b-high.



*-- Para hacer sumatorios utilizamos SUM  
SELECT SUM( CANTIDADTTE )
       SUM( CANTIDADPAGADA )
       SUM( IMPORTE )
       SUM( IMPORTE_CIN )

       CAMION PLANTA_SAP DIVISION
INTO (I_DATOS-MCTRAN, I_DATOS-MCPAGA, I_DATOS-IMPTOT,
      I_DATOS-IMPINC, I_DATOS-CAMION, I_DATOS-PLANTA,
      I_DATOS-DIVISI)
FROM ZALBARANES
WHERE FECHA IN S_FECHA
  AND ESTADO GT '4'
GROUP BY DIVISION PLANTA_SAP CAMION.


ENDSELECT.


*-- Cuando queremos decir que nos coja todos lo registros que empiecen por... 006*

SELECT *
FROM COSP
WHERE GJAHR EQ P_EJERCI
  AND OBJNR EQ D_CENTRO_COSTE
  AND ( KSTAR LIKE '006%' OR KSTAR LIKE '009%' OR KSTAR LIKE '008%' )
  AND WRTTP EQ '04'.



*-- Para evitar hacer un LOOP a una tabla interna.

SELECT *
FROM /bic/cubo23
INTO TABLE i_cub
FOR ALL ENTRIES IN ti_cuentas
WHERE fiscyear = p_gjahr
  AND /bic/co_area = i_sociedades-co_area
  AND /bic/version = version
  AND /bic/costelmnt = ti_cuentas-cuenta
  AND /bic/center IN s_kostl.



Referencia: http://www.abap.es/foro/index.php#c1