我有几个存储为视图的摘要查询...
...并希望将它们组合成一个组合输出,如下所示:
..所以我可以将它用作 Excel 中的数据透视表。
日期是该案例中唯一的共同点。
我可以使用 SUMIFS 在 Excel 中执行此操作,但更愿意在 SQL 到达 Excel 之前对其进行管理。
任何人都可以帮忙吗?
我有几个存储为视图的摘要查询...
...并希望将它们组合成一个组合输出,如下所示:
..所以我可以将它用作 Excel 中的数据透视表。
日期是该案例中唯一的共同点。
我可以使用 SUMIFS 在 Excel 中执行此操作,但更愿意在 SQL 到达 Excel 之前对其进行管理。
任何人都可以帮忙吗?
如果没有匹配的 ID,我能想到的最好的方法是 order by ROW_NUMBER()
,这会给出一个稍微冗长的查询;
WITH cte1 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY DATE
ORDER BY CASE WHEN Dogs IS NULL THEN 1 END) r1
FROM View1
), cte2 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY DATE
ORDER BY CASE WHEN Region IS NULL THEN 1 END) r2
FROM View2
), cte3 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY DATE
ORDER BY CASE WHEN Bed IS NULL THEN 1 END) r3
FROM View3
)
SELECT COALESCE(cte1.Date, cte2.Date, cte3.Date) Date,
Dogs, D_Qty, Region, R_Qty, Bed, B_Qty
FROM cte1
FULL OUTER JOIN cte2
ON cte1.Date = cte2.Date AND r1=r2
FULL OUTER JOIN cte3
ON cte1.Date = cte3.Date AND r1=r3
OR cte2.Date = cte3.Date AND r2=r3
ORDER BY Date, COALESCE(r1,r2,r3)
您可以考虑使用 向您的视图添加一个顺序列ROW_NUMBER() OVER (PARTITION BY DATE ORDER BY (whatever order is in them)
,这将消除所有 cte 并为您提供稳定的事物排序。
如果您可以在 view1 和 view2 和 view3 中添加一列而不是轻松解决您的问题,