SQL Server 尝试合并两个查询的结果

6fe3ivhb  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(188)

我有两个疑问:

select
    CM.Month,
    CM.Year
FROM CalendarMonths AS CM

上面的查询返回日历表中可用的所有月份和年份。
第二个查询如下所示:

select
    DATEPART(month, T.Date) AS Month,
    DATEPART(year, T.Date) AS Year,
    ISNULL(SUM(Amount) ,0) As Total
from Transactions T
inner join TransactionClasses TC on TC.TransactionClassId = T.TransactionClassId AND T.TransactionClassId = 3
GROUP BY
    DATEPART(month, T.Date),
    DATEPART(year, T.Date)

这只是返回属于按月和年分组的特定事务处理类的事务处理的合计。上述查询仅返回实际包含事务处理的月和年的行。
我尝试完成的是组合这两个查询,以便在返回包含Transactions的月份和年份的总计的同时,还返回其余月份的零总计。
到目前为止,我的尝试都没有成功,所以任何帮助都将不胜感激。

5lhxktic

5lhxktic1#

你需要对你的数据集进行LEFT JOIN操作,我会把你的第二个查询放到CTE/derived表中,这会使JOIN操作更容易:

WITH Totals AS(
    SELECT DATEPART(MONTH, T.Date) AS Month,
           DATEPART(YEAR, T.Date) AS Year,
           SUM(TC.Amount) AS Total
    FROM dbo.Transactions T
         INNER JOIN dbo.TransactionClasses TC ON TC.TransactionClassId = T.TransactionClassId
    WHERE T.TransactionClassId = 3 --Moved from ON
    GROUP BY DATEPART(MONTH, T.Date),
             DATEPART(YEAR, T.Date))
SELECT CM.Month,
       CM.Year,
       ISNULL(T.Total,0) AS Total
FROM dbo.CalendarMonths CM
     LEFT JOIN Totals T ON CM.Month = T.Month
                       AND CM.Year = T.Year;

相关问题