SQL PIVOT Tabelle

bemiw

Neuer Benutzer
Beiträge
2
Hallo Forum,

ich arbeite erst seit kurzen mit SQL und habe ein Frage zur PIVOT-Funktion.

/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP (5)
[Timestamp]
,[LogInterval]
,[DeviceName]
,[PowerAvg]

FROM [WecData].[dbo].[123_WecData]

Ich würde gerne folgende Tabelle:

Timestamp LogInterval DeviceName PowerAvg
2011-12-15 18:40:00.000 5 A1.2 55
2011-12-15 18:40:00.000 5 A1.3 99
2011-12-15 18:40:00.000 5 A1.1 33
2011-12-15 18:40:00.000 5 A1.4 442
2011-12-15 18:45:00.000 5 A1.2 52

so abrufen dass der 'DeviceName' in der Zeile ist. So sollte die Tabelle dann aussehen:

TimestampLogIntervalA1.2A1.3A1.1A1.4
2011-12-15 18:40:00.000
5​
55​
99​
33​
442​
2011-12-15 18:45:00.000
5​
52​


Kann mir jemand weiterhelfen?
 
Werbung:
easy:

Code:
postgres=# select * from bemiw ;
         ts          | dev  | val 
---------------------+------+-----
 2011-12-15 18:40:00 | a1.2 |  55
 2011-12-15 18:40:00 | a1.3 |  99
 2011-12-15 18:40:00 | a1.1 |  33
 2011-12-15 18:40:00 | a1.4 | 443
 2011-12-15 18:45:00 | a1.2 |  52
(5 rows)

postgres=# select ts, sum(val) filter (where dev = 'a1.2') as "a1.2", sum(val) filter (where dev = 'a1.3') as "a1.3", sum(val) filter (where dev = 'a1.1') as "a1.1", sum(val) filter (where dev = 'a1.4') as "a1.4" from bemiw group by ts order by ts;
         ts          | a1.2 | a1.3 | a1.1 | a1.4 
---------------------+------+------+------+------
 2011-12-15 18:40:00 |   55 |   99 |   33 |  443
 2011-12-15 18:45:00 |   52 |      |      |     
(2 rows)

postgres=#

Hab das letzte Jahre hier schon oft gezeigt als "Zeilen zu Spalten" ...
 
So sollte die Tabelle dann aussehen:

Dazu 2-3 Anmerkungen:
MS SQL kann kein FILTER
dafür gibt es workarounds
einer wäre:
MS SQL kann PIVOT, einfach googlen

Generell sind Pivot SQL oder Alternativen mit Vorsicht zu genießen, weil sie häufig nicht praktikabel einsetzbar sind. Ja, in einem Beispiel schon, aber weniger, wenn die Werte in der echten DB variieren. Immer dann, wenn die Spalten potentiell variabel sind, wird es umständlich. Einzige Abhilfe dann, das SQL zu generieren. Außerdem sollte man sich bewusst sein, dass genau in diesem Fall eine SQL Weiterverarbeitung selten Sinn macht > Wegen dynamischer Spalten.
Gegenbeispiel, relativ gut umsetzbar ist das ganze mit festen Ergebnisspalten, also z.B. Monatsspalten (immer 12) usw.
Das bedeutet, dass man solche Aufgabenstellungen direkt in einem geeigneten Reporting Tool bewerkstelligt oder die nötige Sorgfalt beim Generieren des SQL einsetzt.
 
Werbung:
Zurück
Oben