多表查询SQL中的多个计数

时间:2011-07-11 14:05:06

标签: sql sql-server count relational-database

我想通过调查ID来计算不同的请求,并按SubjectValue

对其进行分组

我在一个带有子查询的表上完成了这个,但是我不太确定要用几个。谁能帮助我?

这是3个表的连接方式。值得注意的唯一值是

subjectValue - Table A
Request_Id - Table A
Survey_Id - Table C
SELECT     TableA.SubjectValue
FROM          TableB INNER JOIN
                       TableA ON TableB.ID = TableA.Request_ID INNER JOIN
                       Table C ON TableB.Details_ID = TableC.ID

我还要补充说,所有计数都应该在同一行中返回。

有3个不同的调查ID,因此计数需要在survey_id上有where子句。

希望这是有道理的。

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

您可以使用通用的交叉表方法

select 
    TableA.SubjectValue,
    SUM(case when somecol='request1' then 1 else 0 end) as request1,
    SUM(case when somecol='request2' then 1 else 0 end) as request2,
    .
TableB INNER JOIN
                       TableA ON TableB.ID = TableA.Request_ID INNER JOIN
                       Table C ON TableB.Details_ID = TableC.ID
group by
    TableA.SubjectValue

答案 1 :(得分:1)

假设您在表B(请求)上有外键,您可能不需要加入表C(调查)。

试试这个。

SELECT TableA.SubjectValue, COUNT(TableB.SurveyID)
FROM TableB 
INNER JOIN TableA ON TableB.ID = TableA.Request_ID 
Group by TableA.SubjectValue

编辑:要包括SurveyID使用此..

SELECT      TableC.SurveyID, TableA.SubjectValue, COUNT(TableB.RequestId)
FROM        TableA 
INNER JOIN  TableB ON TableB.SurveyID = TableA.SurveyID 
INNER JOIN  TableC ON TableC.RequestID = TableB.RequestID
Group by TableA.SubjectValue, TableC.SurveyID

(希望我没有把我的A,B和C混在一起。)