【问题标题】:JOIN CTE's Grouped by Month/Year加入 CTE 按月/年分组
【发布时间】:2019-08-16 04:31:35
【问题描述】:

我有多个 CTE,这会导致以下通用表结构:

Year | Month | Total_Purchases_Product_Line_X

这些代表按月和年分组的跨多个产品线的购买。

例如)

SELECT * FROM cte_line_x    

Year | Month | Total_Purchases_Product_Line_X
2018    01      256
2018    02      192

SELECT * FROM cte_line_y    

Year | Month | Total_Purchases_Product_Line_Y
2018    01      76
2018    02      59

我想创建类似下面的东西

Year | Month | Total_Purchases_Line_X | Total_Purchases_Line_Y | Total_Purchases_Line_Z
2018    01     256                       76
2018    02     192                       59

每个产品线的总采购量相加。但是,在将每个 CTE 的日期组合在一起后,我遇到了问题。 这是我尝试过的:

SELECT 
    cte_product_x.Month, 
    cte_product_x.Year, 
    cte_product_x.total as Total_X, 
    cte_product_y.total as Total_Y, 
    cte_product_z.total as Total_Z
FROM 
     cte_product_x
LEFT JOIN
     cte_product_y ON
     cte_product_y.year = cte_product_x.year
     AND
     cte_product_y.month = cte_product_x.month
LEFT JOIN
     cte_product_z ON
     cte_product_z.year = cte_product_x.year
     AND
     cte_product_z.month = cte_product_x.month
 GROUP BY 
    cte_product_x.Month, 
    cte_product_x.Year
  ORDER BY 
    cte_product_x.Month, 
    cte_product_x.Year

我尝试将我的 SELECT 更改为:

SELECT 
    cte_product_x.Month, 
    cte_product_x.Year, 
    MAX(cte_product_x.total as Total_X), 
    MAX(cte_product_y as Total_Y), 
    MAX(cte_product_z as Total_Z)

但是,它仅适用于“Total_X”。其他列的计数是为所有月份的分组总数找到的最大值。我不明白为什么。

【问题讨论】:

    标签: sql tsql


    【解决方案1】:

    这不行吗?

    SELECT x.Month, x.Year, x.total as Total_X, 
           y.total as Total_Y, z.total as Total_Z
    FROM cte_product_x x JOIN
         cte_product_y y
         ON y.year = x.year AND y.month = x.month JOIN
         cte_product_z z
         ON z.year = x.year AND z.month = x.month
    ORDER BY x.Month, x.Year;
    

    至少它适用于您的示例数据。

    【讨论】:

    • 是的。我刚刚检查了我的实际 SQL,我认为这不起作用的原因是因为我将同一个 CTE 加入到自身中:(哦,男孩。现在是 5 点钟 - 对吧?lol Ty
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2017-03-24
    • 2021-10-16
    相关资源
    最近更新 更多