c64b311ee9
Goto Top

Mehrere Spaltenwerte in neuer Spalte speichern SQL

Hallo liebe Community,

lang ists her aber mal wieder eine Frage... ich stehe auf dem Schlauch...

Ich habe eine Tabelle, in dieser gibt es 9 boolean Felder. Merhfachauswahl ist möglich.


Jetzt will ich ungern alle 10 Felder in meine Auswertung mit aufnehmen sondern lediglich eins.
In diesem soll dann der Spaltenname des Feldes stehen, wenn der Wert des Feldes 1 ist, so wie im Screenshot.
Könnt ihr mir helfen?
Danke im Voraus!

Content-ID: 1138050300

Url: https://administrator.de/contentid/1138050300

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

ukulele-7
ukulele-7 09.08.2021 um 13:25:06 Uhr
Goto Top
Das ergibt aber erstmal keinen Sinn, Breite 50 = 0 aber 100 und 200 = 1, sind das jetzt nur Beispiel-Daten oder ist das wirklich der Bestand?

Willst du dein Datenmodell anpassen oder willst du nur eine Auswertung bauen? Natürlich musst du alle 10 Spalten "abfragen", um die Information für deine Zielspalte zu gewinnen. Am einfachsten (aber auch am umfangreichsten) geht das mit einer Verkettung von CASE Anweisungen. Elegantere Lösungen gäbe es sicherlich auch (vielleicht mit UNPIVOT?) aber das Problem ist aus meiner Sicht erstmal die Logik, siehe erste Frage.
c64b311ee9
c64b311ee9 09.08.2021 um 13:37:33 Uhr
Goto Top
Hallo ukulele-7,

Danke für deine schnelle Antwort. Ich habe nur nach Beispieldaten gesucht, vielleicht nicht das beste Beispiel gebe ich zu... face-smile
Ich will nur auswerten, mit Case hatte ich auch schon angefangen es dann wieder verworfen weil ich alle Möglichkeiten prüfen muss, dachte es gibt einen schnelleren Weg... face-smile
149062
149062 09.08.2021 aktualisiert um 13:44:15 Uhr
Goto Top
Das Tabellendesign ist ehrlich gesagt ziemlich grottig. Vor allem wenn man eine Breite hinzufügen will muss man das Tabellenschema updaten ... aua. Ich würde mir wirklich überlegen das umzubauen und für die Breiten eine eigene Tabelle mit IDs anzulegen, auf die man sich dann in anderen Tabellen via Fremdschlüssel bezieht. So wie es jetzt ist wirst du dauernd auf solche kruden Umwege gestoßen die man sonst mit verständlichen Queries abfackelt.
https://dba.stackexchange.com/questions/248830/mysql-how-to-check-for-a- ...
c64b311ee9
c64b311ee9 09.08.2021 um 13:55:10 Uhr
Goto Top
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
ukulele-7
ukulele-7 09.08.2021 um 14:40:34 Uhr
Goto Top
Also am elegantesten wäre glaube ich UNPIVOT und auf das Ergebnis dann mit FOR XML PATH aggregieren. Ist aber bei "nur" 10 Spalten mehr Code als das grade mit (CASE WHEN [Breite 050] = 1 THEN 'Breite 050;' ELSE '' END) + ... zu verketten.
em-pie
em-pie 09.08.2021 aktualisiert um 14:47:02 Uhr
Goto Top
Moin,

Zitat von @c64b311ee9:

Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...

Nöö, geht auch anders.

drei Spalten:
ID | Name | Value

ID = AutoIncrement
Name = Name der Spalte {Breite 0050, Breite 0100, Breite 0150, ... Breite 1200}
Value = 1 oder 0

Ggf. noch einen vierten Wert, der den User oder Auftrag oder was auch immer identifiziert
Und nimm universelle Namen für die Inhalte in "Name" - dann kann man das später mit wenig Aufwand auch Multilingual nutzen face-smile

Edit: dann wird die Tabelle am Ende zwar deutlich länger, aber du bist bei Erweiterungen und Auswertungen flexibler:
SELECT name, Count(*) as Cnt 
FROM myTable 
WHERE Name = 'Width0050' and Value = 1  
GROUP BY name

Gruß
em-pie
149062
149062 09.08.2021 aktualisiert um 14:57:05 Uhr
Goto Top
Zitat von @c64b311ee9:
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
Sicher geht dat, glaub ihr solltet euren Programmierer wechseln oder dem mal einen Kurs "Relationales Datenbankdesign" spendieren face-smile.
c64b311ee9
c64b311ee9 09.08.2021 um 14:57:39 Uhr
Goto Top
Zitat von @149062:

Zitat von @c64b311ee9:
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
Sicher geht dat, glaub ihr solltet euren Programmierer wechseln face-smile.

Du weißt doch überhaupt nicht welche Anwendung dahinter steckt, Hauptsache erstmal raushauen "Sicher geht dat".
Ich habs mir selbst angesehen und es geht in diesem ERP System nicht anders.
149062
149062 09.08.2021 aktualisiert um 15:46:32 Uhr
Goto Top
Zitat von @c64b311ee9:
Ich habs mir selbst angesehen und es geht in diesem ERP System nicht anders.
Dann schreibt man sich eine passenden Wrapper/Schnittstelle und schon geht es wieder. Geht nicht gibt's nicht. Fällt einem früher oder später doch immer wieder auf die Füße, wie du gerade am eigenen Leibe merkst face-wink.
Den Aufwand treibst du einmal hast es aber später bei neuen Aufgaben leichter es zu erweitern, sonst stehst du dann erneut bei Administrator.de auf der Matte face-wink.
ukulele-7
ukulele-7 09.08.2021 aktualisiert um 16:21:07 Uhr
Goto Top
Ich habe auch genug Systeme die das nicht können. Klar kann ich mir da ne Krücke bauen die die Daten zwar normalisiert ablegt aber per View oder was auch immer der Anwendung zur Verfügung stellt. Ist aber am Ende das selbe anders rum nur mit mehr Aufwand.
akretschmer
akretschmer 10.08.2021 um 09:13:51 Uhr
Goto Top
Zitat von @c64b311ee9:

Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...

Du könntest auch kündigen. Würde Dir den späteren BurnOut ersparen.
ukulele-7
ukulele-7 10.08.2021 um 09:33:37 Uhr
Goto Top
Zitat von @akretschmer:

Zitat von @c64b311ee9:

Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...

Du könntest auch kündigen. Würde Dir den späteren BurnOut ersparen.
Gut das wir endlich zum Kernproblem vorgestoßen sind face-smile Ich liebe unsere Forenkultur.
ukulele-7
ukulele-7 12.08.2021 um 14:44:09 Uhr
Goto Top
Hast du das mit der Lösung hinbekommen oder soll ich dir das mal bauen?
c64b311ee9
c64b311ee9 12.08.2021 um 15:28:13 Uhr
Goto Top
Hi Ukulele,

ich habe es noch nicht weiter probiert ehrlich gesagt... würde mich aber trotzdem gerne interessieren also wenn du Zeit und Lust hast gerne! face-smile