Es kann nützlich sein, eine bestimmte Menge von Werten innerhalb einer SELECT-Anweisung oder einer Prozedur zu speichern. Nehmen wir zum Beispiel an, dass eine Firma es vorzieht, die Ergebnisse ihrer Handelsvertreter anstatt quartalsweise pro Jahresdrittel zu analysieren. Da es im Gegensatz zu den Quartalen keine integrierten Datumsteile für Jahresdrittel gibt, ist es notwendig, die Datumsangaben innerhalb der Prozedur zu speichern.
WITH thirds ( q_name, q_start, q_end ) AS ( SELECT 'T1', '2000-01-01', '2000-04-30' UNION SELECT 'T2', '2000-05-01', '2000-08-31' UNION SELECT 'T3', '2000-09-01', '2000-12-31' ) SELECT q_name, SalesRepresentative, count(*) AS num_orders, SUM( p.UnitPrice * i.Quantity ) AS total_sales FROM thirds LEFT OUTER JOIN SalesOrders AS o ON OrderDate BETWEEN q_start and q_end KEY JOIN SalesOrderItems AS I KEY JOIN Products AS p GROUP BY q_name, SalesRepresentative ORDER BY q_name, SalesRepresentative; |
Diese Methode sollte mit Umsicht verwendet werden, da die Werte möglicherweise periodische Aktualisierungen erfordern. So muss zum Beispiel die oben stehende Anweisung modifiziert werden, um für ein anderes Jahr zu gelten.
Sie können diese Methode auch innerhalb von Prozeduren verwenden. Das folgende Beispiel deklariert eine Prozedur, die das betreffende Jahr als Argument nimmt.
CREATE PROCEDURE sales_by_third ( IN y INTEGER ) BEGIN WITH thirds ( q_name, q_start, q_end ) AS ( SELECT 'T1', YMD( y, 01, 01), YMD( y, 04, 30 ) UNION SELECT 'T2', YMD( y, 05, 01), YMD( y, 08, 31 ) UNION SELECT 'T3', YMD( y, 09, 01), YMD( y, 12, 31 ) ) SELECT q_name, SalesRepresentative, count(*) AS num_orders, SUM( p.UnitPrice * i.Quantity ) AS total_sales FROM thirds LEFT OUTER JOIN SalesOrders AS o ON OrderDate BETWEEN q_start and q_end KEY JOIN SalesOrderItems AS I KEY JOIN Products AS p GROUP BY q_name, SalesRepresentative ORDER BY q_name, SalesRepresentative; END; |
Die folgende Anweisung ruft die obige Prozedur auf.
CALL sales_by_third (2000); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |