计算一些字符为数字的比较

时间:2013-03-27 15:17:34

标签: sql

真的用你们作为一个发声板,但这是我的情况

我试图找出如何根据员工编号(Num字段)创建员工表的准确计数,其中一些员工编号中包含字母。

详细说明: 四家公司,大约2年前合并。主要公司一直使用纯数字作为员工编号。 First Sub Company曾经使用过字母和数字,现在已经切换到所有Numbers,但是旧的员工记录仍然有字母。 (其他子公司在同一张表中,但就本报告而言,它们并不重要)

00000-55555的所有员工记录均为主要公司,55556-88888为First Sub公司。此外,任何带有信件的员工编号也是First Sub公司的一部分。

我知道如何仅针对数字范围制作案例陈述,但员工号码的字母部分却让我失望。

我不确定如何为两家公司准确计算员工人数。与那些存在的人一起

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效(如果我对你的情况的理解是正确的):

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

答案 1 :(得分:0)

如果你在SQL Server中(你的帖子中没有提到你的RDBMS),你可以使用以下内容来实现你想要的:

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替换为您的表格。

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

答案 2 :(得分:0)

假设SQLServer,请尝试:

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