新手问题: 我有4个表有4个相似的数据列类型以及每个表独有的多个列。为了便于解释,每个查询只包含1个唯一列。
我想按MonthDate,Department,Category,Subcategory汇总数据,然后根据每个查询中的每个唯一列进行汇总。
对于Date,Department,Category,Subcategory,每个查询都会有一些组合,但没有一个会有所有组合。
我无法弄清楚如何正确和最佳地组合它们。
来自销售的查询
SELECT SalesDate, DeptCode, CatCode, SubCatCode, SUM(SalesUnits)
FROM SalesTable
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, SalesDate), 0), DeptCode, CatCode, SubCatCode
╔══════╦══════╦══════╦══════╦══════╗
║ DATE ║ DPT ║ CAT ║ SUB ║ SLS ║
╠══════╬══════╬══════╬══════╬══════╣
║ 10/1 ║ 01 ║ 35 ║ 3548 ║ 11 ║
║ 11/1 ║ 01 ║ 35 ║ 3556 ║ 14 ║
╚══════╩══════╩══════╩══════╩══════╝
从购买表中查询
SELECT BuyDate, DeptCode, CatCode, SubCatCode, SUM(BuyUnits)
FROM BuyTable
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, BuyDate), 0), DeptCode, CatCode, SubCatCode
╔══════╦══════╦══════╦══════╦══════╗
║ DATE ║ DPT ║ CAT ║ SUB ║ BUY ║
╠══════╬══════╬══════╬══════╬══════╣
║ 10/1 ║ 01 ║ 35 ║ 3548 ║ 17 ║
║ 11/1 ║ 01 ║ 35 ║ 3567 ║ 10 ║
╚══════╩══════╩══════╩══════╩══════╝
从调整表中查询
SELECT AdjustDate, DeptCode, CatCode, SubCatCode, SUM(AdjustmentUnits)
FROM AdjustmentTable
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, AdjustDate), 0), DeptCode, CatCode, SubCatCode
╔══════╦══════╦══════╦══════╦══════╗
║ DATE ║ DPT ║ CAT ║ SUB ║ ADJ ║
╠══════╬══════╬══════╬══════╬══════╣
║ 10/1 ║ 01 ║ 35 ║ 3556 ║ 5 ║
║ 11/1 ║ 01 ║ 35 ║ 3567 ║ 3 ║
╚══════╩══════╩══════╩══════╩══════╝
从折扣表中查询
SELECT DiscountDate, DeptCode, CatCode, SubCatCode, SUM(DiscountAmount)
FROM DiscountTable
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, DiscountDate), 0), DeptCode, CatCode, SubCatCode
╔══════╦══════╦══════╦══════╦══════╗
║ DATE ║ DPT ║ CAT ║ SUB ║ DSC ║
╠══════╬══════╬══════╬══════╬══════╣
║ 10/1 ║ 01 ║ 40 ║ 4014 ║ 75 ║
║ 11/1 ║ 01 ║ 35 ║ 3567 ║ 23 ║
╚══════╩══════╩══════╩══════╩══════╝
我希望总结如下:
╔══════╦══════╦══════╦══════╦══════╦══════╦══════╦══════╗
║ DATE ║ DPT ║ CAT ║ SUB ║ SLS ║ BUY ║ ADJ ║ DSC ║
╠══════╬══════╬══════╬══════╬══════╬══════╬══════╬══════╣
║ 10/1 ║ 01 ║ 35 ║ 3548 ║ 11 ║ 17 ║ NULL ║ NULL ║
║ 10/1 ║ 01 ║ 35 ║ 3556 ║ NULL ║ NULL ║ 5 ║ NULL ║
║ 10/1 ║ 01 ║ 40 ║ 4014 ║ NULL ║ NULL ║ NULL ║ 75 ║
║ 11/1 ║ 01 ║ 35 ║ 3556 ║ 14 ║ NULL ║ NULL ║ NULL ║
║ 11/1 ║ 01 ║ 35 ║ 3567 ║ NULL ║ 10 ║ 3 ║ 23 ║
╚══════╩══════╩══════╩══════╩══════╩══════╩══════╩══════╝
这似乎对我有用:
SELECT COALESCE(T1.MDate, T2.MDate, T3.MDate, T4.MDate) MDate
, COALESCE(T1.Dept, T2.Dept, T3.Dept, T4.Dept) Dept
, COALESCE(T1.Cat, T2.Cat, T3.Cat, T4.Cat) Cat
, COALESCE(T1.Sub, T2.Sub, T3.Sub, T4.Sub) Sub
, SalesUnits, BuyUnits, AdjustmentUnits, DiscountAmount
FROM T1 FULL JOIN
T2 ON T2.MDate = T1.MDate AND T1.Dept = T2.Dept AND T1.Cat = T2.Cat AND T1.SubCat = T2.SubCat FULL JOIN
T3 ON T3.MDate = coalesce(T1.MDate, T2.MDate) AND T3.Dept = coalesce(T1.Dept, T2.Dept) AND T3.Cat = coalesce(T1.Cat, T2.Cat) AND T3.SubCat = coalesce(T1.SubCat, T2.SubCat) FULL JOIN
T4 ON T4.MDate = coalesce(T1.MDate, T2.MDate, T3.MDate) AND T4.Dept = coalesce(T1.Dept, T2.Dept, T3.Dept) AND T4.Cat = coalesce(T1.Cat, T2.Cat, T3.Cat) AND T4.SubCat = coalesce(T1.SubCat, T2.SubCat, T3.SubCat)