2013-09-24 27 views
15

Próbuję połączyć 2 rzędy wyników w 1 przy użyciu poniższej klauzuli CASE. "< 26" powinien pojawić się tylko raz, a wyniki powinny zostać połączone.MySQL - Łączenie wielu warunków WHEN w CASE

SELECT 
    CASE org.size 
     WHEN 0 THEN '<26' 
     WHEN 1 THEN '<26' 
     WHEN 2 THEN '26-50' 
     WHEN 3 THEN '51-100' 
     WHEN 4 THEN '101-250' 
     WHEN 5 THEN '251-500' 
     WHEN 6 THEN '501-1000' 
     WHEN 7 THEN '1001-5000' 
     ELSE '5000+' END 
     AS 'Size', 
     COUNT(DISTINCT org.id) AS '# of Companies' 
FROM org INNER JOIN usr ON usr.orgid = org.id 
    INNER JOIN usr_role ON usr.id = usr_role.usrid 
WHERE org.deleted = 0 AND usr.brnd = 1 AND usr_role.role = 1 
GROUP BY org.size; 
+0

Mogłeś prosty Zmiana 'jako„Size'' do 'W” OrgSize'', a następnie grupy przez OrgSize – MrSimpleMind

Odpowiedz

38

co powiesz na to?

SELECT CASE 
      WHEN org.size IN (0, 1) THEN '<26' 
      WHEN org.size = 2 THEN '26-50' 
      WHEN org.size = 3 THEN '51-100' 
      WHEN org.size = 4 THEN '101-250' 
      WHEN org.size = 5 THEN '251-500' 
      WHEN org.size = 6 THEN '501-1000' 
      WHEN org.size = 7 THEN '1001-5000' 
     ELSE '5000+' END AS Size, .... 

Problemem jest to, że są grupowania rekordów org.size powodując <26 w dwóch różnych grup, ponieważ są one pierwotnie 0 i 1.

Będzie to działać,

GROUP BY CASE 
      WHEN org.size IN (0, 1) THEN '<26' 
      WHEN org.size = 2 THEN '26-50' 
      WHEN org.size = 3 THEN '51-100' 
      WHEN org.size = 4 THEN '101-250' 
      WHEN org.size = 5 THEN '251-500' 
      WHEN org.size = 6 THEN '501-1000' 
      WHEN org.size = 7 THEN '1001-5000' 
     ELSE '5000+' END 
+0

dobra myśl, ale wyniki nadal wykazują 2 oddzielne wiersze zarówno o rozmiarze "<26" – Ken

+0

możesz pokazać mi wynik zapytania? –

+0

Zestaw wyników (9 pozycji) Rozmiar ---------- Liczba firm <26 ---------- 17 <26 ---------- 87 26-50 -------- 15 51-100 -------- 13 101-250 ------- 12 251-500 ------- 8 501-1000 ------ 5 1001-5000 ----- 6 5000+ ---------- 5 – Ken