0

真的把你们当作一个共鸣板,但这是我的情况

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

详情:四家公司,大约 2 年前合并。主要公司一直使用纯数字作为员工编号。First Sub Company 以前使用字母和数字,现在改用所有 Numbers,但老员工记录仍然有字母。(其他子公司在同一张表中,但就本报告而言,它们无关紧要)

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

我知道如何纯粹为数字范围做一个案例陈述,但是员工编号的字母部分让我失望。

我不确定如何准确计算两家公司的员工人数。和那些在场的人

4

3 回答 3

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
于 2013-03-27T15:30:20.700 回答
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您的表的名称替换。

这将输出一个包含公司列(第一个子公司或主要公司)的表,后跟属于每个公司的员工人数。

于 2013-03-27T15:30:45.667 回答
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 )

于 2013-03-27T15:34:59.150 回答