多表连接以生成报告计数

时间:2013-11-20 22:54:19

标签: sql-server-2008 inner-join

我正在尝试生成一个报告,该报告将显示来自3个表的数据,如下所示:

    SELECT  B.datepoll, B.clientID, B.badTerm, A.FullQuery, 
    B.badMessage, C.clientNAME, E.CURRENT_TERMS
    FROM BadTerms AS B INNER JOIN
    QueryTERMS AS A ON B.badTerm = A.QUERIES INNER JOIN
    Clients AS C ON B.clientID = C.clientID INNER JOIN
    ( 
      SELECT CLIENTID,COUNT(QUERIES) AS CURRENT_TERMS FROM QueryTERMS  WHERE 
      clientID = 'XXXXXX' GROUP BY CLIENTID) E ON 
      E.CLIENTID = A.CLIENTID
      WHERE  (CONVERT(VARCHAR(10), B.datepoll, 120) < CONVERT(VARCHAR(10), GETDATE(), 120)) 
      AND (B.clientID = 'XXXXXX')  

基本上应该显示的是给定的datepoll,显示所有badTerms,fullQuery,badMessage,clientID,clientName和总条款。 clientID在所有3个表中都很常见,查询在BadTerms和QueryTerms中很常见。

除了总数以外我一切都很好。它应该只显示一次,并且是QueryTerms表中的总查询而不是BadTerms表。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

现在实际上已经开始工作了:

    SELECT  B.datepoll, B.clientID, B.badTerm, A.FullQuery, 
    B.badMessage, C.clientNAME, E.CURRENT_TERMS
    FROM BadTerms AS B INNER JOIN
    QueryTERMS AS A ON B.badTerm = A.QUERIES INNER JOIN
    Clients AS C ON B.clientID = C.clientID INNER JOIN
    ( 
      SELECT CLIENTID,COUNT(QUERIES) AS CURRENT_TERMS FROM QueryTERMS  WHERE 
      clientID = 'XXXXXX' GROUP BY CLIENTID) E ON 
      E.CLIENTID = A.CLIENTID
      WHERE  (CONVERT(VARCHAR(10), B.datepoll, 120) < CONVERT(VARCHAR(10), GETDATE(), 120)) 
      AND (B.clientID = 'XXXXXX')