首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >某些字符是数字的计数比较

某些字符是数字的计数比较
EN

Stack Overflow用户
提问于 2013-03-27 23:17:34
回答 3查看 88关注 0票数 0

把你们当做传声筒,但这是我的情况

我正在尝试弄清楚如何根据员工编号(Num字段)为员工表创建准确的计数,其中一些员工编号中包含字母。

细节:四家公司,大约两年前合并。主公司一直使用纯数字作为员工编号。First Sub Company过去使用字母和数字,现在已全部转换为数字,但较旧的员工记录仍然使用字母。(其他子公司在同一张表中,但就本报告而言,它们无关紧要)

00000-55555年度所有员工记录均为主单位,55556-88888年度为第一子单位。此外,任何带有字母的员工编号也是第一子公司的一部分。

我知道如何纯粹地为数字范围编写case语句,但是员工数字的字母部分让我感到困惑。

我不知道如何准确地计算出这两家公司的雇员人数。这些也是存在的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-27 23:30:21

这样的东西应该可以工作(如果我对你的情况的理解是correc的话):

代码语言:javascript
复制
SELECT
    SUM( IsFirstSubCompany ) FirstSubCompanyEmployeeCount
    , SUM( IsMainCompany ) MainCompanyEmployeeCount
FROM
    (
        SELECT
            IsFirstSubCompany = CASE 
                WHEN u.Num LIKE '%[a-z]%' OR ( 1 = ISNUMERIC( u.Num ) AND CONVERT( INT, u.Num ) BETWEEN 55556 AND 88888 ) THEN 1 ELSE 0
            END,
            IsMainCompany = CASE
                WHEN 1 = ISNUMERIC( u.Num ) AND CONVERT( int, u.Num ) BETWEEN 00000 and 55555 THEN 1 ELSE 0
            END
        FROM
            UserTable u    
    ) q
票数 0
EN

Stack Overflow用户

发布于 2013-03-27 23:30:46

如果您使用的是SQL Server (您在帖子中没有提到您的RDBMS ),您可以使用以下方法来实现您正在寻找的目标:

代码语言:javascript
复制
SELECT  Company,
        COUNT(*) AS NoOfEmployees
FROM
    (
        SELECT  CASE ISNUMERIC(EmployeeNo)
                    WHEN 1 THEN
                        CASE 
                            WHEN (EmployeeNo < 55556) THEN 'Main Company'
                            ELSE 'First Sub Company'
                        END
                    ELSE 'First Sub Company'
                END AS Company
          FROM  [table]
    ) a
GROUP BY Company

记住将EmployeeNo替换为您的员工编号列的实际名称,将table替换为您的表的名称。

这将输出一个表,其中包含一个Company列(First Sub Company或Main Company),后跟属于每个列的员工数量。

票数 0
EN

Stack Overflow用户

发布于 2013-03-27 23:34:59

假设使用SQLServer,请尝试:

代码语言:javascript
复制
with cte as
(select
 case when convert(numeric,
                   case isnumeric(employee_no) when 1 then employee_no else '99999' end)
           between 0 and 55555 then 'Main' else 'Sub' end co
 from employee)
select co, count(*) from cte group by co

(SQLFiddle here)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15662468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档