[英]How do you count misspelled fields using a SQL query?
我有一个要查询的SQL数据库,它是项目的一部分-我对此只有读取权限。
有一个名为ResultStatus
的列-可能的值为“ Passed”和“ Failed”。 但是,原始数据输入者有一些错别字,因此其中一些人也说“已完成”。 我想计算“失败”条目的数量,但是我也想包括“已完成”条目。
SELECT
ResultStatus, Count(*)
FROM
[DB_018].[dbo].[ProjectData]
GROUP BY ResultStatus
显然将“ Fialed”分组在另一个类别中。 我希望将其与“失败”一起计算在内。
您可以自己更正拼写
SELECT Case When ResultStatus = 'Fialed' then 'Failed' Else ResultStatus End AS ResultStatus, Count(*)
FROM [DB_018].[dbo].[ProjectData]
GROUP BY Case When ResultStatus = 'Fialed' then 'Failed' Else ResultStatus End
这是在对数据进行分组时用正确的拼写替换错误的拼写。
请注意,使用CTE可以这样做,而且可能更清洁
with CleanedResults as (
select
case
when ResultStatus = 'Fialed' then 'Failed'
when ResultStatus = 'Pased' then 'Passed'
else ResultStatus
end as ResultStatus
from [DB_018].[dbo].[ProjectData]
) select
ResultStatus
, count(*) as NumResults
from CleanedResults
group by ResultStatus
我会用:
SELECT
case when left(ResultStatus,1) = 'P' then 'Pass'
when left(ResultStatus,1) = 'a' then 'audit'
else 'fail' end as result, Count(*)
FROM
ProjectData
GROUP BY left(ResultStatus,1)
因为COUNT不会真正计算NULL值,所以您可以使用CASE语句,只需编写如下:
SELECT COUNT(CASE WHEN ResultStatus = 'Fialed' THEN 1
END) as MissSpelledFailed,
COUNT(CASE WHEN ResultStatus = 'Pased' THEN 1
END) as MisSpelledPassed,
COUNT(CASE WHEN ResultStatus = 'Failed' THEN 1
END) as CorrectSpelledFailed,
COUNT(CASE WHEN ResultStatus = 'Passed' THEN 1
END) as CorrectSpelledPassed,
FROM [DB_018].[dbo].[ProjectData]
您需要获取ResultStatus的不同列表,并将它们全部添加到下面的case语句中。 我不需要Raj的方法,因为您不需要使用CTE(并非在所有版本的SQL Server中都可用)或调整分组依据。
SELECT
ResultStatus,count(*) [Count]
FROM(
SELECT
CASE
WHEN ResultStatus = 'FIAL' THEN 'FAIL'
WHEN ResultStatus = 'FAIL' THEN 'FAIL'
WHEN ResultStatus = 'Passed' THEN 'Passed'
END [ResultStatus]
FROM [DB_018].[dbo].[ProjectData]
)a
GROUP BY ResultStatus
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.