SQL过滤器查询,无法获得正如我所寻找的正确输出

时间:2014-07-04 08:38:47

标签: asp.net sql

这是ASP.net SQL数据库中的查询:

SELECT OpenWorkWeek, COUNT(Validation) AS Invalid, COUNT(Validation) AS Valid
FROM Email
GROUP BY OpenWorkWeek, Validation
ORDER BY OpenWorkWeek

输出:

WorkWeek Invalid Valid
-----------------------    
WW 01       4      4
WW 01      52     52
WW 02      21     21
WW 02     231    231

我想要显示的结果应该是这样的:

WorkWeek Invalid Valid
------------------------    
WW 01       4      52
WW 02      21     231

请查询帮助!

谢谢! :)

2 个答案:

答案 0 :(得分:1)

您必须发布Validation Column的值,以便我们可以获得Count Validation的值。

例如,考虑Validation的值为

Validation
----------
Valid 
InValid
InValid
Valid
Valid

所以查询将是

SELECT OpenWorkWeek, SUM(Case When Validation = 'Valid' Then 1 Else 0 End) AS Valid,   
       SUM(Case When Validation = 'InValid' Then 1 Else 0 End) AS InValid
FROM Email
GROUP BY OpenWorkWeek
ORDER BY OpenWorkWeek

输出

WorkWeek Invalid Valid
------------------------    
WW 01       4      52
WW 02      21     231

您可以根据validation

替换案例陈述

修改

要获得有效和无效的分部结果,请尝试这样。

SELECT OpenWorkWeek,Valid,Invalid, (Cast(Valid As Decimal)/ Cast(InValid As Decimal)) As Percentage
From
   (
    SELECT OpenWorkWeek, SUM(Case When Validation = 'Valid' Then 1 Else 0 End) AS Valid,   
           SUM(Case When Validation = 'InValid' Then 1 Else 0 End) AS InValid
    FROM Email
    GROUP BY OpenWorkWeek
    ORDER BY OpenWorkWeek
   )Tmp

答案 1 :(得分:1)

如果您需要每个工作周的结果记录,则应按工作周分组,而不是按周工作加验证。要获得有效和无效的计数,只需在每次匹配时加1即可。在您的评论中,您说验证是“有效”或“无效”,因此:

SELECT OpenWorkWeek, 
  SUM( CASE WHEN Validation = 'invalid' THEN 1 END ) AS Invalid
  SUM( CASE WHEN Validation = 'valid' THEN 1 END ) AS Valid
FROM Email
GROUP BY OpenWorkWeek
ORDER BY OpenWorkWeek;