[ABAP] OpenSQL: Summenbildung (SUM) mit Abhängigkeit (CASE)

Variante 1

* Summenbildung, abhängig von Spalte Soll/Haben
DATA: lv_bsid_sum type bsid-dmbtr.

SELECT SUM( CASE shkzg
* Haben
                WHEN 'H' THEN dmbtr
* Soll, negieren für Subtraktion
                WHEN 'S' THEN dmbtr * -1
            END )
  INTO @lv_bsid_sum
  FROM bsid
  WHERE bukrs = '0040'.

IF sy-subrc = 0.
* Summierten Wert ausgeben
  WRITE: / lv_bsid_sum.
ENDIF.

Variante 2

* Summenbildung, abhängig von Spalte Soll/Haben
DATA: lv_bsid_sum type bsid-dmbtr.

SELECT SUM( CASE
* Haben
                WHEN shkzg = 'H' THEN dmbtr
* Soll, negieren für Subtraktion
                WHEN shkzg = 'S' THEN dmbtr * -1
            END )
  INTO @lv_bsid_sum
  FROM bsid
  WHERE bukrs = '0040'.

IF sy-subrc = 0.
* Summierten Wert ausgeben
  WRITE: / lv_bsid_sum.
ENDIF.

[ABAP] OpenSQL: Felder im SELECT mit konstanten Werten füllen

* Variante 1 (Konstante)
CONSTANTS: co_empty TYPE char7 VALUE '<empty>'.
* Konstante über Alias maktx in das korrespondierende Feld MAKTX einfügen
SELECT matnr, @co_empty AS maktx FROM mara INTO TABLE @DATA(it_mara) UP TO 10 ROWS.

cl_demo_output=>display( it_mara ).

* Variante 2 (Variable)
DATA: lv_empty TYPE char7 VALUE '<empty>'.
* Konstante über Alias maktx in das korrespondierende Feld MAKTX einfügen
SELECT matnr, @lv_empty AS maktx FROM mara INTO TABLE @DATA(it_mara) UP TO 10 ROWS.

cl_demo_output=>display( it_mara ).

[ABAP] OpenSQL: Verknüpfte Abfrage mehrerer Tabellen, INNER JOIN, Alias

PARAMETERS: p_name TYPE string DEFAULT 'xyz'.

START-OF-SELECTION.

* SELECT durch Verknüpfung über mehrere Tabellen
  SELECT u~bname,
         u~persnumber,
         u~addrnumber,
         a~smtp_addr
    INTO TABLE @DATA(it_usr)
    FROM usr21 AS u
    INNER JOIN adr6 AS a ON a~persnumber = u~persnumber AND a~addrnumber = u~addrnumber
    WHERE u~bname = @name.

  cl_demo_output=>display( it_usr ).

[ODBC] Zugriff per System- oder Benutzer-DSN

Im Beispiel wird mit ODBC über ein Benutzer-DSN [Systemsteuerung->Verwaltung->Datenquellen (ODBC)] auf eine PostgreSQL-Datenbank zugegriffen. Das zugehörige SQL-Statement ruft alle in der Datenbank erzeugten Tabellen ab.

using System.Data;
using System.Data.Odbc;

// hier System- oder Benutzer-DSN (Alias) eintragen
string sDSN = @"mein DSN";
// Username
string sUID = @"user";
// Passwort
string sPW = @"password";

// alle Tabellen einer PostgreSQL-Datenbank abrufen
string sSql = @"SELECT table_name FROM information_schema.tables";

OdbcConnection conn = null;
OdbcDataReader reader = null;

try
{
    // Verbindung herstellen
    conn = new OdbcConnection(@"dsn=" + sDSN + ";UID=" + sUID + ";PWD=" + sPW + ";");
    conn.Open();

    // SQL-Kommando abschicken
    OdbcCommand cmd = new OdbcCommand(sSql, conn);
    reader = cmd.ExecuteReader();

    // Daten auslesen und anzeigen
    while (reader.Read())
    {
        Console.WriteLine(reader["table_name"]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex);
}
finally
{
    // aufräumen
    if (reader != null) reader.Close();
    if (conn != null) conn.Close();
}