【问题标题】:Inner join of 3 tables with row count具有行数的 3 个表的内部联接
【发布时间】:2016-07-29 06:37:15
【问题描述】:

我有 3 个表 A、B 和 C,如下所示。

所有 3 个表都有一个共同的 CUST_ID 列。表 A 和 B 有 2 个公共列 CUST_IDA_ID。我必须显示表C 中的NAME,表B 中的Test_ID 计数,每个CUST_IDSTARTEND 来自表A。预期结果表是这样的,

我试过inner join 喜欢,

select C.Name ,A.Start,A.[End]
from
C
inner join
B
on C.CUST_ID = B.CUST_ID
inner join
A
on A.A_ID = B.A_ID and A.CUST_ID = B.CUST_ID

但它总共提供 7 行。如何显示东CUST_IDTest_ID的计数,并且只显示4行,如预期结果表所示?

【问题讨论】:

    标签: sql sql-server join count inner-join


    【解决方案1】:

    试试这个

        SELECT C.NAME, Tmp.Test_COUNT, A.START, A.END
        FROM C INNER JOIN A ON C.CUST_ID = A.CUST_ID
        INNER JOIN
        (
            SELECT CUST_ID, A_ID, COUNT(*) AS Test_COUNT
            FROM B
            GROUP BY CUST_ID, A_ID
        ) Tmp ON Tmp.CUST_ID = A.CUST_ID AND Tmp.A_ID = A.A_ID    
    

    【讨论】:

      【解决方案2】:

      您需要使用子查询来获取表B中的测试计数,并加入该表而不是直接加入B

      SELECT C.NAME, t.Test_COUNT, A.START, A.END
      FROM C
      INNER JOIN A
          ON C.CUST_ID = A.CUST_ID
      INNER JOIN
      (
          SELECT A_ID, COUNT(*) AS Test_COUNT
          FROM B
          GROUP BY A_ID
      ) t
          ON t.A_ID = A.A_ID
      

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多