【问题标题】:Calculate year to date duplicate计算年初至今重复
【发布时间】: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


【解决方案1】:

首先要删除查询的optimize the performance,您必须删除子查询并使用联接而不是子查询,还需要为查询生成实际执行计划并确定所需的missing index

注意:缺少索引可能会影响您的 SQL Server 性能,从而降低您的 SQL Server 性能,因此请务必查看您的实际查询执行计划并确定正确的索引。

欲了解更多信息,请访问以下链接。

1) SQL Server Basic Performance Tuning Tips and Tricks

2)Create Missing Index From the Actual Execution Plan

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2023-03-16
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多