如何使用SQL查询计算拼写错误的字段?

时间:2014-11-06 22:00:31

标签: sql sql-server

我有一个SQL数据库,我正在查询作为项目的一部分 - 我只有读取权限。

有一个名为ResultStatus的列 - 可能的值是"通过"和"失败"。然而,原始数据输入器存在一些拼写错误,所以有些人说" Fialed"同样。 我想计算"失败"条目,但我想包括" Fialed"也是。

SELECT 
        ResultStatus, Count(*)
        FROM 
            [DB_018].[dbo].[ProjectData]

        GROUP BY ResultStatus

显然是分组" Fialed"在不同的类别。我希望它与"失败"一起计算。

4 个答案:

答案 0 :(得分:5)

您可以自行更正拼写

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

答案 1 :(得分:0)

我会用:

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)

答案 2 :(得分:0)

因为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]

答案 3 :(得分:0)

您需要获取一个不同的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