多表查询SQL中的多个计数

多表查询SQL中的多个计数,sql,sql-server,count,relational-database,Sql,Sql Server,Count,Relational Database,我想按调查Id统计不同的请求,并按SubjectValue对其进行分组 我只对一个带有子查询的表执行了此操作,但我不太确定是否要对多个表执行此操作。有人能帮我吗 这就是三个表的连接方式。唯一值得注意的是 subjectValue - Table A Request_Id - Table A Survey_Id - Table C 主题值-表A 请求Id-表A 调查Id-表C 选择TableA.SubjectValue 从表B内部连接 TableB.ID=TableA.Request\u ID内部

我想按调查Id统计不同的请求,并按SubjectValue对其进行分组

我只对一个带有子查询的表执行了此操作,但我不太确定是否要对多个表执行此操作。有人能帮我吗

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

subjectValue - Table A Request_Id - Table A Survey_Id - Table C 主题值-表A 请求Id-表A 调查Id-表C 选择TableA.SubjectValue 从表B内部连接 TableB.ID=TableA.Request\u ID内部联接上的TableA 表B.中的表C.详细信息\u ID=表C.ID 我还要补充一点,所有计数都应在同一行中返回

有3个不同的测量Id,因此计数需要测量Id上的where子句

希望这是有道理的


非常感谢。

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

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

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

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

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

试试这个

SELECT TableA.SubjectValue, COUNT(TableB.SurveyID)
FROM TableB 
INNER JOIN TableA ON TableB.ID = TableA.Request_ID 
Group by TableA.SubjectValue
编辑:要包含调查ID,请使用此

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。)

如果表B(请求)上有外键,您可能不需要加入表C(调查)

试试这个

SELECT TableA.SubjectValue, COUNT(TableB.SurveyID)
FROM TableB 
INNER JOIN TableA ON TableB.ID = TableA.Request_ID 
Group by TableA.SubjectValue
编辑:要包含调查ID,请使用此

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。)

我需要包括调查Id。这是区分不同类型调查的唯一方法。谢谢,我忘了在我的原始问题中输入每个调查Id的计数都应该返回到同一分组行中。我需要包括调查Id。这是区分不同类型调查的唯一方法。谢谢,我忘了在我原来的问题中提出,每个调查Id的计数都应该在同一分组行中返回。