SQL连接包括来自一个表的所有行,而不管在另一个表中表示了多少行

时间:2015-02-21 17:08:22

标签: sql sql-server tsql

我有两张桌子:

Tables

我想输出以下内容:

Desired output

我试过这句话:

SELECT TableA.bu_code
     , SUM(TableB.count_invalid_date) AS TotalInvDate 
FROM TableA 
LEFT JOIN TableB ON TableA.bu_code = TableB.bu_code 
GROUP BY TableA.bu_code

但它没有显示TableA中表示的每一行,而是执行此操作:

Actual output

是否有一个可以输出我想要的SQL语句?

3 个答案:

答案 0 :(得分:0)

您可以在执行left join后使用group by

SELECT    a.bu_code, COALESCE (TotalInvDate, 0)
FROM      TableA a
LEFT JOIN (SELECT   bu_code, SUM(count_invalid_date) AS TotalInvDate
           FROM     TableB
           GROUP BY bu_code) b ON a.bu_code = b.bu_code

答案 1 :(得分:0)

TableAU中可能存在没有父行的孤立表行。

如果是这样,请使用此GROUP BY语法查看它们。

GROUP BY ROLLUP(TableA.bu_code)

有关ROLLUP选项的更多详细信息,请参阅此Microsoft SQL-Server page on the GROUP BY clause

答案 2 :(得分:0)

SELECT A.bu_code AS [bu_code],
       ISNULL(sum( B.count_invalid_date),0) AS [TotalInvDate]
FROM 
         TableA A 
left JOIN 
         TableB B 
ON 
         A.bu_code=B.bu_code
GROUP BY 
         A.bu_code