如果等于0,则从结果中排除SUM

时间:2014-08-15 16:46:45

标签: sql sql-server sql-server-2012

我有以下数据结构:

问题表

QuestionID  | Question  | Error
      1        Who?         1
      2        What?        0
      3        When?        1
      4        Who?        1

QuestionID是int,Question是varchar,Error是位字段。

用户统计表

   User | QuestionID  
   Mary       1
   Joe        2
   Mary       3
   Mary       1

User是varchar,QuestionID是int。

我正在尝试设计两个查询。

在第一个查询中,我试图按问题分组,并说谁?两次回答错了,什么时候?回答错了一次,并没有报告任何事情?因为它没有错误的答案。这是我到目前为止,一切正常,但我很难不包括什么?结果中的问题,目前它返回“0”并包含在结果中:

SELECT 'Question - ' +[Question] + ' - Answered Wrong ' + 
CAST(SUM(CONVERT(INT, Error)) as varchar) + 'Times' As Report
FROM [Questions]
GROUP BY [Question];

在我的第二个查询中,我试图通过QuestionID列关联表。从本质上讲,试图说Mary两次错误地回答了QuestionID 1,而QuestionID 3错了一次。该查询还没有任何内容。此查询所需的完整字符串类似于:

"Mary Answered Question Who? Wrong 2 Times"
"Mary Answered Question When? Wrong 1 Times"

对乔没什么,因为他没有回答任何错误。

SQL Server 2012,我无法控制数据结构。 TIA!

2 个答案:

答案 0 :(得分:2)

您可以使用having子句在分组后过滤结果。在查询中添加最后一个:

HAVING SUM(CONVERT(INT, Error)) > 0

对于第二个查询,您将加入用户的表和组:

SELECT [User] + ' answered question ' + [Question] + ' wrong ' + 
CAST(SUM(CONVERT(INT, Error)) as varchar) + ' times' As Report
FROM [Questions] q
INNER JOIN [User Stat] u on u.QuestionID = q.QuestionID
GROUP BY [User]
HAVING SUM(CONVERT(INT, Error)) > 0

答案 1 :(得分:0)

我认为陈述HAVING的{​​{1}}子句必须大于0才有意义。