【发布时间】:2019-05-16 08:49:37
【问题描述】:
我正在尝试计算年初至今
我试试这个脚本,它返回的值很好,但是太慢了
select
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization,
SUM(QTY) as Month_Total,
COALESCE(
(
select SUM(s2.QTY)
FROM stg.Fact_DC_AGG s2
where
s2.Sales_Organization = T.Sales_Organization
and s2.[Delivery_Year]=T.[Delivery_Year]
AND s2.Delivery_month<= T.Delivery_month
),0) as YTD_Total
from stg.Fact_DC_AGG T
group by
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization
ORDER BY
Sales_Organization,T.[Delivery_Year],
T.Delivery_month
我对其进行了修改以优化它,但它返回错误值和重复值:
select
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization,
SUM(QTY) as Month_Total,
COALESCE(
(
),0) as YTD_Total
from stg.Fact_DC_AGG T
INNER JOIN stg.Fact_DC_AGG s2
ON
s2.Sales_Organization = T.Sales_Organization
and s2.[Delivery_Year]=T.[Delivery_Year]
AND s2.Delivery_month<= T.Delivery_month
group by
T.Delivery_month,
T.[Delivery_Year],
Sales_Organization
ORDER BY
Sales_Organization,T.[Delivery_Year],
T.Delivery_month
如何优化查询或纠正第二个脚本?
【问题讨论】:
-
您真的还在使用 SQL Server 2008R2 吗? 2008 和 2008R2 还剩不到 2 个月的支持时间,都不支持 Window Functions 做累计和。三角连接可能会变得非常昂贵,因此如果您在 2012 年以上,则可以通过摆脱它来进行大优化。
-
通过升级到受支持的 SQL Server 版本并使用 2012 年及以后提供的累积和功能来优化查询。
-
您的查询会为表中的每一年/每月生成值。一般来说,没有人比较多年数据(或者是几十年?)的 YTD 值。如果你这样做了,那么你预计计算会有点慢。你在这里的真正目标是什么?您是否正在针对狭窄且很少使用的用例优化查询? 2天前问的大致相同的问题没有回应。
标签: sql sql-server sql-server-2008-r2