我有以下数据结构:
问题表
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!
答案 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才有意义。