真的用你们作为一个发声板,但这是我的情况
我试图找出如何根据员工编号(Num字段)创建员工表的准确计数,其中一些员工编号中包含字母。
详细说明: 四家公司,大约2年前合并。主要公司一直使用纯数字作为员工编号。 First Sub Company曾经使用过字母和数字,现在已经切换到所有Numbers,但是旧的员工记录仍然有字母。 (其他子公司在同一张表中,但就本报告而言,它们并不重要)
00000-55555的所有员工记录均为主要公司,55556-88888为First Sub公司。此外,任何带有信件的员工编号也是First Sub公司的一部分。
我知道如何仅针对数字范围制作案例陈述,但员工号码的字母部分却让我失望。
我不确定如何为两家公司准确计算员工人数。与那些存在的人一起
答案 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)