Forum: PC-Programmierung Mysql Case gruppieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sebastian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

gibt es eine Möglichkeit, dass man in MySQL mehrere Case gruppiert?

Beispiel: http://sqlfiddle.com/#!9/6a1759/

Aufbau der Datenbank
1
ID  |is_staff  |is_reporter  |is_superuser  |state
2
123  |0  |0  |1  |a
3
456  |1  |0  |1  |a
4
789  |0  |1  |1  |a
5
123  |1  |0  |1  |d
6
456  |1  |1  |1  |d

aktuell habe ich das so:
1
SELECT ID,
2
CASE WHEN is_staff = 1
3
      THEN 'Yes'   
4
      END AS 'is_staff?',
5
      
6
 CASE WHEN is_reporter = 1
7
      THEN 'Yes'   
8
      END AS 'is_reporter?',
9
             
10
 CASE WHEN is_superuser = 1
11
      THEN 'Yes'   
12
      END AS 'is_superuser?'
13
14
from users_list 
15
where state = 'a'
16
group by 1;
1
ID  |is_staff?  |is_reporter?  |is_superuser?
2
123  |(null)  |(null)  |Yes
3
456  |Yes  |(null)  |Yes
4
789  |(null)  |Yes  |Yes

Ginge das, dass man das so ausgegeben bekommt?
1
ID  |Status  
2
123  |superuser  
3
456  |staff, superuser  
4
789  |reporter, superuser

von c.m. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
geht das mit mysql? wäre allerdings ohne komma :/
1
select id, is_staff || ' ' || is_reporter || ' ' || is_superuser from
2
(
3
SELECT ID,
4
CASE WHEN is_staff = 1
5
      THEN 'Yes'   
6
      END AS 'is_staff?',
7
      
8
 CASE WHEN is_reporter = 1
9
      THEN 'Yes'   
10
      END AS 'is_reporter?',
11
             
12
 CASE WHEN is_superuser = 1
13
      THEN 'Yes'   
14
      END AS 'is_superuser?'
15
16
from users_list 
17
where state = 'a'
18
group by 1;
19
)
20
order by 1

von Sebastian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nein, so geht das nicht, so etwas ähnliches hatte ich bereits versucht:

Sehe gerade, dass ich den falschen Link gepostet habe, hier der 
richtige:
http://sqlfiddle.com/#!9/6a1759/20

von DPA (Gast)


Bewertung
0 lesenswert
nicht lesenswert
1
SELECT ID, TRIM(', ' FROM CONCAT(
2
  CASE WHEN is_staff = 1 THEN 'staff, ' ELSE '' END,
3
  CASE WHEN is_reporter = 1 THEN 'reporter, ' ELSE '' END,
4
  CASE WHEN is_superuser = 1 THEN 'superuser, ' ELSE '' END
5
)) as groups
6
from users_list 
7
where state = 'a';
http://sqlfiddle.com/#!9/6a1759/41/0

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.