Summe auf temporäre Tabelle

Dirk D

Neuer Benutzer
Beiträge
3
Hi Folks,
hier ein kleines Skript:

Code:
CREATE TABLE #databases
(
DATABASE_NAME VARCHAR(250),
DATABASE_SIZE FLOAT,
REMARKS VARCHAR(250)
)
 
INSERT #databases EXEC ('EXEC sp_databases')
 
SELECT
    DATABASE_NAME,
    DATABASE_SIZE AS '(KB)',
    ROUND(DATABASE_SIZE / 1024, 2) AS MB,
    ROUND((DATABASE_SIZE / 1024) / 1024, 2) AS GB,
    REMARKS
FROM #databases
 
DROP TABLE #databases

Damit lasse ich mir die Größen aller Datenbanken auf dem Server anzeigen.
Da als Standard die Größe in KB ausgegeben wird, werden die beiden Spalten
MB und GB mit entsprechender Umrechnung hinzugefügt.

Die Ausgabe sieht dann ungefähr so aus:

Code:
+---------------+-------+-------+-------+---------+
| DATABASE_NAME | KB    | MB    | GB    | REMARKS |
+---------------+-------+-------+-------+---------+
| Datenbank 1   |  4160 |  4.06 |  0    | NULL    |
| Datenbank 2   |  6528 |  6.38 |  0.01 | NULL    |
| ...           |  ...  |  ...  |  ...  | ...     |
+---------------+-------+-------+-------+---------+

Jetzt interessiert mich aber auch die Summe der Spalten KB, MB und GB.

Am Ende soll es wie folgt aussehen:
Code:
+---------------+-------+-------+-------+---------+
| DATABASE_NAME | KB    | MB    | GB    | REMARKS |
+---------------+-------+-------+-------+---------+
| Datenbank 1   |  4160 |  4.06 |  0    | NULL    |
| Datenbank 2   |  6528 |  6.38 |  0.01 | NULL    |
| ...           |  ...  |  ...  |  ...  | ...     |
| Summe         | 10688 | 11.44 |  0.01 |         |
+---------------+-------+-------+-------+---------+

Tja, wie mache ich das nun? ;-)

Eine View auf eine temporäre Tabelle geht ja nicht.

Mit Sum(...) komme ich nicht an die Felder KB, MB und GB,
Diese werden ja im Prinzip aus der DATABASE_SIZE nur für
die temporäre Tabelle erzeugt.

Und nu?

Danke
Dirk
 
Werbung:
Tja, wie mache ich das nun? ;-)

Eine View auf eine temporäre Tabelle geht ja nicht.

Mit Sum(...) komme ich nicht an die Felder KB, MB und GB,
Diese werden ja im Prinzip aus der DATABASE_SIZE nur für
die temporäre Tabelle erzeugt.

Und nu?

Danke
Dirk

Du könntest das normal berechnen (weitere Berechnung) und mit UNION drankleistern. Falls M$SQL ROLLUP kann, könntest Du baer auch das nutzen.

http://wiki.postgresql.org/wiki/Grouping_Sets


Edit: http://stackoverflow.com/questions/13990821/postgresql-equivalent-to-sqlserver-group-by-with-rollup , also M$SQL sollte es können.

Andreas
 
Hallo Dirk,

beide von Andreas vorgeschlagenen Wege ermöglichen das von dir gewünschte Ergebnis.
Zu beachten ist lediglich, dass die Option "WITH ROLLUP" für jede gruppierte Spalte eine zusätzliche Aggregations-Zeile erzeugt.
So lange du also nur über eine Spalte gruppierst, erhälst du das gewünschte Ergebnis.

Viele Grüße,
Tommi
 
Ja super....genau das isses. ;-)
Mit "WITH ROLLUP" habe ich es hinbekommen.

Zwar habe ich nun einen Eintrag namens "NULL" in
der Zeile der Summen, aber das bekomme ich auch
noch geregelt.

Ach so...hier der leicht modifizierte Code:
Code:
CREATE TABLE #databases
(
DATABASE_NAME VARCHAR(250),
DATABASE_SIZE FLOAT,
REMARKS VARCHAR(250)
)
INSERT #databases EXEC ('EXEC sp_databases')
SELECT
    DATABASE_NAME,
    SUM(DATABASE_SIZE) AS '(KB)',
    SUM(ROUND(DATABASE_SIZE / 1024, 2)) AS '(MB)',
    SUM(ROUND((DATABASE_SIZE / 1024) / 1024, 2)) AS '(GB)'
FROM #databases
GROUP BY DATABASE_NAME WITH ROLLUP
DROP TABLE #databases


Vielen Dank
Dirk
 
Hallo Dirk,

der NULL-Wert lässt sich leicht mit der ISNULL()-Funktion abfangen:

Code:
SELECT ISNULL(DATABASE_NAME, 'Summe') as DATABASE_NAME, ...

Viele Grüße,
Tommi
 
Werbung:
Zurück
Oben