SQL从具有相似日期和ID的表中选择所有对象

时间:2014-05-13 15:04:01

标签: sql sql-server

我对SQL很新,并且无法搞清楚这个查询。我有一个数据库表,用于存储用户对他们填写的表单的答案。

此表格包含:

AnswerID (Primary Key, bigint), 
Answer (varchar),
QuestionID (bigint), 
CompanyID (int), 
Date (smalldatetime).  

我想选择所有具有相同CompanyID和Date的Answers。这为我提供了足够的信息来确定所有公司对一个表单的回答(单个表单可以有多个问题,因此不止一个答案)。但是,我们不知道/关心日期和公司ID是什么,确切地说,在查询时 - 我们只想总结每个公司对表单的答案(循环,并为每个公司执行)。

SELECT * FROM tablename WHERE ???

4 个答案:

答案 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

Working example on SQLFiddle

答案 3 :(得分:0)

我无法清楚地得到你真正需要的东西,但如果你想要清楚地列出清单中的所有信息,请在此处示例代码:
select * from tablename order by CompanyID,Date,QuestionID