Datum

Hallo, ich hab mal wieder eine Frage

Ich möchte diese Datum Darstellung Thu Mar 29 2018 21:50:59 GMT+0200 (Mitteleuropäische Sommerzeit)
in dieses Format ändern 2019-08-10 15:54:15.301+00

ist das möglich und wenn ja wie

Besten Dank vorab

https://www.postgresql.org/docs/11/functions-formatting.html

Ich komme mit den Seiten nur schlecht zurecht, habs dann aber in meinen älteren sql Scripts gefunden

Trotzdem Danke!!

Mein nächstes Problem
habe eine Tabelle, stark vereinfacht
und möchte darstellen wie oft kommt jedes Ergebnis pro AuftragsNr vor

AuftragNr|Ergebnis|
100 | 10 |
100 | 10 |
100 | 10 |
100 | 9 |
100 | 8 |
200 | 10 |
200 | 1 |
200 | 7 |
200 | 7 |

Aussehen sollte es so

AuftragsNr| 10 | 9 | 8 | 7 | 1 |
100 | 3 | 1 | 1 |
200 | 1 | | | 2 |

habs mit crosstab versucht komme aber zu keinem Ergebnis
aber für die Spezialisten hier sicher kein Problem

besten Dank für jede Hilfe oder Anregung

gruß simar

Mal für Ergebniss von 10 bis 7, die Erweiterung ab 6 bis 1 überlasse ich Dir zur Übung:

test=*# select * from simar ;
 nr  | erg 
-----+-----
 100 |  10
 100 |  10
 100 |  10
 100 |   9
 100 |   8
 200 |  10
 200 |   1
 200 |   7
 200 |   7
(9 rows)

test=*# select nr, sum(case when erg = 10 then 1 else 0 end) as "10", sum(case when erg = 9 then 1 else 0 end) as "9", sum(case when erg = 8 then 1 else 0 end) as "8", sum(case when erg = 7 then 1 else 0 end) as "7" from simar group by nr; 
 nr  | 10 | 9 | 8 | 7 
-----+----+---+---+---
 200 |  1 | 0 | 0 | 2
 100 |  3 | 1 | 1 | 0
(2 rows)

test=*#

Danke Dir, bei der Steilvorlage kein Problem, funktioniert.

Zusatzfrage besteht die Möglichkeit die Werte der Spalte “erg” in die Zeile " nr | 10 | 9 | 8 | 7 " als Spaltenname zu übernehmen nachdem ich sie vorher gezählt wurden

test=*# select * from simar ;
nr | erg
-----±----
100 | 10
100 | 10
100 | 10
100 | 9
100 | 8
200 | 10
200 | 1
200 | 7
200 | 7

Hä?

ich meinte dass der select ohne , as “10”, as “9” ,vorgaben auskommt,
sondern direkt den gefundenen Wert ( 10; 9; 8; 7; 1; )als Spaltennamen übernimmt
wird aber nicht funktionieren.

Im Prinzip ginge das auch, dazu müßte man aber das SQL-Statement dynamisch erstellen und ausführen.
https://www.postgresql.org/docs/11/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

dachte man könnte das Suchergebnis einfach um 90 Grad drehen mittels crosstab oder array_to_string()
aber das ist leider zu hoch für mich

Wenn es irgendwie geht, sollte man pivot/crosstab grundsätzlich in der Anwendung machen, die die Daten anzeigt. Das ist wesentlich leichter und flexibler (und macht auch das SQL deutlich einfacher).

Wenn es wirklich mal sein muss, dass man mehrere Zeilen zu Spalten transponieren muss, gehe ich eigentlich mehr und mehr dazu über, die dynamischen “Spalten” in eine JSON Spalte zu aggregieren. In den meisten Fällen ist das fast genauso gut, und deutlich einfacher zu verwenden - und es ist vollständig “dynamisch”. Wenn neue Werte für die “Spalten” hinzukommen passiert das automatisch, ohne dass man das Statement ändern müsste.

Z.b. so wie hier beschrieben: https://blog.sql-workbench.eu/post/pivot-alternatives/

hört sich gut an, aaaaber mir zu schwierig

Dann mach’s in der Anwendung wenn Du die Daten anzeigst.

wie meinst du das?

das ist meine Anzeige aus Abfrage
nr | erg | wie oft
-----±----
100 | 10 | 3
100 | 9 | 1
100 | 8 | 1
200 | 10 | 1
200 | 1 | 1
200 | 7 | 2

Du meinst ein Pivot? Mit crosstab sollte das gehen, ist aber IMHO recht umständlich. Wie wird das am Ende denn dargestellt? Ich mache solche Darstellungen meist im jeweiligen Client.
Gruß Uwe

crosstab wurde ja eigentlich schon genannt (sogar vom TE).
Es ist halt wie ebenfalls genannt nicht dynamisch, was problematisch ist.
Wenn, dann könnte im Fall hier nur die Variante mit 2 Selects, eins für Daten, eins für Header genommen werden.
Ein Select für Header ergibt aber dynamische Ergebnisse, außer man sorgt absichtlich dafür, dass das Headerstatement ein statisches Ergebnis hat. Hier vielleicht mit generate series 1-10 oder sowas.