2014-11-06 219 views
1

我有一个SQL数据库,我正在查询作为项目的一部分 - 我只有读取权限。如何计算使用SQL查询拼写错误的字段?

有一列叫做ResultStatus - 可能的值是“合格”和“失败”。但是,原始数据输入者存在一些拼写错误,所以他们中的一些人也说“Fialed”。 我想统计“失败”条目的数量,但我想包含“Fialed”条目。

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

     GROUP BY ResultStatus 

明显地将“Fialed”分组在另一个类别中。我希望它与“失败”一起计算。

+0

看到孩子......这就是为什么如果你有一个布尔列,你可以使用一点或tinyint,如果你是未来的校对类型。 – UnhandledExcepSean 2014-11-07 00:46:56

回答

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 
+0

@Michelle,我一般喜欢Raj的方法,但是如果您想最大限度地确信自己已经解决了所有拼写错误,那么您可以在该列中找到所有单词的变体,例如, '从DB_018.dbo.ProjectData order by 1'中选择不同的ResultStatus。以后可以节省你的时间。 – Yawar 2014-11-07 00:40:10

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) 
+0

Beth,当有'Absent'状态时会发生什么? – 2014-11-06 22:06:44

+0

已更新。重点是减少对精确的自由格式文本数据输入的依赖,而不是整个单词 – Beth 2014-11-06 22:07:47

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] 
0

您需要获取ResultStatus的清单并将它们全部添加到下面的案例陈述。由于您不需要使用CTE(不适用于所有版本的SQL Server)或通过调整组,因此我更喜欢将此方法应用于Raj。

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