【问题标题】:Multiple counts in a multi table query SQL多表查询 SQL 中的多个计数
【发布时间】:2011-07-11 14:05:05
【问题描述】:

我想按调查 ID 统计不同请求并按 SubjectValue 分组

我只在一个带有子查询的表上完成了此操作,但我不太确定要对多个表执行此操作。谁能帮帮我?

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

主题值 - 表 A Request_Id - 表 A Survey_Id - 表 C 选择表 A.SubjectValue 从表 B 内连接 TableA ON TableB.ID = TableA.Request_ID INNER JOIN 表 C ON TableB.Details_ID = TableC.ID

我还可以补充一点,所有计数都应在同一行中返回。

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

希望这是有道理的。

非常感谢。

【问题讨论】:

    标签: sql sql-server count relational-database


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      假设您在表 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 没有混淆。)

      【讨论】:

      • 我需要包含调查 ID。这是区分不同类型调查的唯一方法。
      • 谢谢,我忘了提出我最初的问题,即每个调查 ID 的计数都应该在同一分组行中返回。
      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2019-08-10
      • 1970-01-01
      • 2021-07-17
      相关资源
      最近更新 更多