22

我正在尝试使用以下 CASE 子句将 2 行结果合并为 1 行。'<26' 应该只出现一次,并且应该合并结果。

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;
4

1 回答 1

57

这个怎么样?

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, ....

问题是您将org.size导致<26两个不同组的记录分组,因为它们最初是01

这将起作用,

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
于 2013-09-24T20:09:24.300 回答