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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1138050300
Url: https://administrator.de/contentid/1138050300
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
14 Kommentare
Neuester Kommentar
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.
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.
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- ...
https://dba.stackexchange.com/questions/248830/mysql-how-to-check-for-a- ...
Moin,
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
Edit: dann wird die Tabelle am Ende zwar deutlich länger, aber du bist bei Erweiterungen und Auswertungen flexibler:
Gruß
em-pie
Zitat von @c64b311ee9:
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
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
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
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 .Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
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 .
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 .
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 .
Zitat von @c64b311ee9:
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
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.
Zitat von @akretschmer:
Du könntest auch kündigen. Würde Dir den späteren BurnOut ersparen.
Gut das wir endlich zum Kernproblem vorgestoßen sind Ich liebe unsere Forenkultur.Zitat von @c64b311ee9:
Ja, ich weiß... aber der Chef wollte verschiedene Felder zum anhaken haben, ging dann nur so...
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.