PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie generiert man eine virtuelle Tabelle, um eine Folge von Daten in PostgreSQL zu generieren?

Liste der Daten

Verwenden Sie die generate_series-Funktion So erhalten Sie eine Liste mit Zahlen, die Sie einem Datum hinzufügen können, um eine Liste mit Daten zu erhalten:

SELECT CURRENT_DATE + s.a AS dates 
  FROM generate_series(0,14,7) as s(a);

Ergebnis:

dates
------------
2004-02-05
2004-02-12
2004-02-19

Drehen

Der letzte Teil Ihrer Frage befasst sich mit dem Pivotieren der Ergebnismenge – dem Konvertieren von Zeilendaten in Spaltendaten. PIVOT und UNPIVOT sind ANSI, aber ich sehe sie nicht als von PostgreSQL unterstützt derzeit . Die am konsistentesten unterstützte Methode zum Pivotieren einer Abfrage ist die Verwendung von Aggregatfunktionen:

   SELECT t.account,
          SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
          SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
          SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
          SUM(t.amount) AS Balance
     FROM (SELECT CURRENT_DATE + s.a AS dates 
             FROM generate_series(0,14,7) as s(a)) x
LEFT JOIN TRANSACTIONS y ON y.date = x.date
 GROUP BY t.account

Dynamische Spalten

...bedeutet dynamisches SQL .