我对SQL很新,并且无法搞清楚这个查询。我有一个数据库表,用于存储用户对他们填写的表单的答案。
此表格包含:
AnswerID (Primary Key, bigint),
Answer (varchar),
QuestionID (bigint),
CompanyID (int),
Date (smalldatetime).
我想选择所有具有相同CompanyID和Date的Answers。这为我提供了足够的信息来确定所有公司对一个表单的回答(单个表单可以有多个问题,因此不止一个答案)。但是,我们不知道/关心日期和公司ID是什么,确切地说,在查询时 - 我们只想总结每个公司对表单的答案(循环,并为每个公司执行)。
SELECT * FROM tablename WHERE ???
答案 0 :(得分:1)
按公司和日期
使用此查询SELECT * FROM tablename
group by CompanyID,Date
order by CompanyID,Date
如果你想按公司,日期和问题那么
SELECT * FROM tablename
group by CompanyID,Date,QuestionID
order by CompanyID,Date
如果您想按公司和日期计算所有答案,那么
SELECT CompantID,Date,count(*)TotalAnswer FROM tablename
group by CompanyID,Date,QuestionID
order by CompanyID,Date
答案 1 :(得分:1)
对于sql server,使用此查询获取公司ID的答案计数。 @from和@to是选择答案时间范围的变量。
select CompanyID, count(*) as NumberOfAnswer from tableName
where Date >= @from and Date <=@to
group by CompanyID
答案 2 :(得分:1)
鉴于你在评论中提到你想要总答案值,那么你可能会考虑将其作为查询的一部分:RDBMS擅长这种工作,他们可以在没有循环的情况下完成(即基于集合的)。美中不足的唯一答案就是文本 - 如果有一个alpha答案(例如SUM
)而不是一个数字答案,那么你使用的任何汇总(如a
)都会失败。稍微扩展其他人给出的答案会给你:
SELECT CompanyID, [Date], SUM(CAST(Answer AS int)) AS Total
FROM test
GROUP BY CompanyID, Date
ORDER BY CompanyID, Date
答案 3 :(得分:0)
我无法清楚地得到你真正需要的东西,但如果你想要清楚地列出清单中的所有信息,请在此处示例代码:
select * from tablename order by CompanyID,Date,QuestionID