Forum: PC-Programmierung Mysql Case gruppieren


von Sebastian (Gast)


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)


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)


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)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.