重现步骤

[步骤]

CODE:N1735187
Error:15_137_2_-2146232060
SQL:DECLARE @nowEndDate DATETIME;
SET @nowEndDate = DATEADD(s, -1, DATEADD(m, 1, @nowDate)); --本月结束

IF OBJECT_ID('Tempdb..#TempPriceRatio') IS NOT NULL
DROP TABLE #TempPriceRatio;
CREATE TABLE #TempPriceRatio
(
MinPrice DECIMAL(18, 2),
MaxPrice DECIMAL(18, 2),
Ratio DECIMAL(18, 2),
);
INSERT INTO #TempPriceRatio
VALUES
(0, 30000, 1),
(30000, 50000, 0.8),
(50000, 80000, 0.6),
(80000, 9999999999, 0.4);

IF OBJECT_ID('Tempdb..#TempProcurementBuyList') IS NOT NULL
DROP TABLE #TempProcurementBuyList;

CREATE TABLE #TempProcurementBuyList
(
ID INT PRIMARY KEY NOT NULL IDENTITY(1, 1),
CustomerID INT,
P_Code NVARCHAR(1000) COLLATE Chinese_PRC_CI_AS,
Single_NO VARCHAR(50) COLLATE Chinese_PRC_CI_AS,
BuyerID INT,
BuyerName NVARCHAR(20) COLLATE Chinese_PRC_CI_AS,
SKU NVARCHAR(10) COLLATE Chinese_PRC_CI_AS,
ProductTitle NVARCHAR(500) COLLATE Chinese_PRC_CI_AS,     ClientSKU NVARCHAR(50) COLLATE Chinese_PRC_CI_AS,     isPackagePrice INT,     LowestDate DATETIME,     LowesBuyMoney MONEY, HistoryLowestDate DATETIME,     HistoryLowePrice MONEY,     LastIsTaxFree INT,     NowDate DATETIME,     NowBuyNum INT,     NowTotalBuyMoney MONEY,     NowAvgPurchasePrice MONEY,     NowAvgPurchasePrice1 MONEY,     ReductionTotalMoney MONEY, --降价金额 HistoryReductionTotalMoney MONEY, --历史降价金额     NowIsTaxFree INT,          --是否退税产品     SupplierPrice MONEY,       --默认供货价     FirstDate DATE,     ProductPrice MONEY,     AddTime DATETIME,     isFirst INT,     SingleDetailID INT ); INSERT INTO #TempProcurementBuyList (     CustomerID,     BuyerID,     BuyerName,     SingleDetailID,     P_Code,     SKU,     isPackagePrice,     LowestDate,     LowesBuyMoney, HistoryLowestDate, HistoryLowePrice,     NowDate,     NowBuyNum,     NowAvgPurchasePrice,     NowAvgPurchasePrice1,     NowIsTaxFree,     Single_NO,     ProductPrice,     FirstDate,     AddTime ) SELECT d.CustomerID,        l.BuyerID,        l.BuyerName,        s.ID SingleDetailID,        d.P_Code,        s.SKU,    -- 是否包装涨价???,这个字段是什么意思        s.isPackagePrice,        MIN(   CASE  WHEN isPackagePrice = 1 THEN s.AddTime ELSE NULL END ),        MIN(   CASE WHEN isPackagePrice = 1 THEN s.ActualProductPrice ELSE NULL END),    MIN(   CASE WHEN isPackagePrice = 1 THEN s.AddTime ELSE NULL END),    MIN(   CASE WHEN isPackagePrice = 1 THEN s.ActualProductPrice ELSE NULL END),        s.AddTime,        ISNULL(pl.PutNum, 0),        --s.ActualBuyNum        MIN(s.ActualProductPrice),        MIN(s.ActualProductPrice),        MAX(ISNULL(wh.IsTaxFree, 0)),    -- 下单号字段都能拿来聚合啊        MAX(Single_NO),        MIN(d.ProductPrice),        MIN(ISNULL(l.ManuallyFinishTime, l.FinishTime)),        MIN(l.AddTime) FROM RB_Procurement_Detail d (NOLOCK)     INNER JOIN RB_Procurement_List l (NOLOCK)         ON d.P_Code = l.P_Code            AND d.CustomerID = l.CustomerID -- 下单主表     LEFT JOIN RB_Procurement_Detail_SingleList ds (NOLOCK)         ON d.P_Code = ds.P_Code            AND d.CustomerID = ds.CustomerID            AND ISNULL(ds.IsDelete, 0) = 0            AND ds.StepState <> -9 -- 下单明细表     INNER JOIN RB_Procurement_Detail_SingleList_Detail s (NOLOCK)         ON d.ID = s.DetailID            AND d.SKU = s.SKU            AND d.CustomerID = s.CustomerID            AND ds.ID = s.ListID     LEFT JOIN RB_WareHouse wh (NOLOCK)         ON l.WareHouseID = wh.ID            AND l.CustomerID = wh.CustomerID -- 供应商表     LEFT JOIN RB_Product_Supplier PS (NOLOCK)         ON PS.CustomerID = l.CustomerID            AND PS.ID = l.SupplierID     LEFT JOIN     (         SELECT CustomerID,                P_Code,                SKU,                SingleDetailID,                SUM(PutNum) AS PutNum -- 入库表         FROM RB_Procurement_Detail_PutList AS p (NOLOCK)         WHERE p.CustomerID = @CustomerID         GROUP BY CustomerID,                  P_Code,                  SKU,                  SingleDetailID     ) AS pl         ON pl.CustomerID = d.CustomerID            AND pl.P_Code = d.P_Code            AND pl.SKU = d.SKU            AND pl.SingleDetailID = s.ID     LEFT JOIN     (         SELECT DISTINCT                CustomerID,                P_Code,                SKU,                1 AS HasMissing         FROM RB_Procurement_Detail_PutList AS p (NOLOCK)         WHERE p.CustomerID = @CustomerID   -- 这一步的筛选条件好奇怪,怎么会有销单明细表里有数据,但是下单表里面没有数据的呢               AND               (                   p.SingleDetailID = 0                   OR p.SingleDetailID IS NULL               )     ) AS pl2         ON pl2.CustomerID = d.CustomerID            AND pl2.P_Code = d.P_Code            AND pl2.SKU = d.SKU WHERE FinishStatus = 1       AND d.CustomerID = @CustomerID   -- 这里的ManuallyFinishTime是什么意思???   --111111111111111111111       AND ISNULL(l.ManuallyFinishTime, l.FinishTime)       BETWEEN @nowDate AND @nowEndDate       AND pl.PutNum > 0       AND PS.SupplierType <> 4 --排除自主生产的产品 GROUP BY d.CustomerID,          l.BuyerID,          l.BuyerName,          d.P_Code,          ds.ID,          s.SKU,          ISNULL(pl.PutNum, 0),          s.AddTime,          s.isPackagePrice,          s.ID; --更新最低价状态 UPDATE #t SET --#t.isPackagePrice = 1,     #t.LowestDate = #t.NowDate,     #t.LowesBuyMoney = #t.NowAvgPurchasePrice --#t.HistoryLowestDate = #t.NowDate, --#t.HistoryLowePrice = #t.NowAvgPurchasePrice FROM #TempProcurementBuyList #t     LEFT JOIN     (         SELECT SKU,                MIN(LowestDate) AS mindate         FROM #TempProcurementBuyList         WHERE isPackagePrice = 1         GROUP BY SKU     ) ss         ON ss.SKU = #t.SKU WHERE ss.SKU IS NOT NULL       AND #t.AddTime > ss.mindate; --获取税后价 UPDATE #TempProcurementBuyList SET NowAvgPurchasePrice = NowAvgPurchasePrice / (1 +     (         SELECT TaxPoint         FROM RB_Product_SupplierPrice (NOLOCK)         WHERE CustomerID = #TempProcurementBuyList.CustomerID               AND SKU = #TempProcurementBuyList.SKU               AND IsDefault = 1               AND IsNew = 1     )/100 ) WHERE CustomerID = @CustomerID       AND NowIsTaxFree = 1; -------------------下单价变成平均价 UPDATE #t SET NowAvgPurchasePrice = hh.NowAvgPurchasePrice1 FROM #TempProcurementBuyList #t     LEFT JOIN     (         SELECT s.SKU,                s.BuyerName,                CASE                    WHEN SUM(s.NowBuyNum) = 0 THEN                        AVG(NowAvgPurchasePrice)                    ELSE -- 应该是每一次下单采购的价格都不一样 -- 这里的NowBuyNum其实是每次入库的数量                        SUM(s.NowAvgPurchasePrice * s.NowBuyNum) / SUM(s.NowBuyNum)                END AS NowAvgPurchasePrice1         FROM #TempProcurementBuyList s         WHERE s.LowestDate IS NULL         GROUP BY s.SKU,                  s.BuyerName     ) hh         ON hh.SKU = #t.SKU            AND hh.BuyerName = #t.BuyerName WHERE #t.LowestDate IS NULL; -------------------------------更新最低价 UPDATE #t SET #t.LowestDate = (CASE                          WHEN SingleTime IS NULL THEN                              #t.NowDate                          ELSE                              SingleTime                      END                     ),     #t.LowesBuyMoney = (CASE                             WHEN MixProductPrice IS NULL THEN                                 0                             ELSE                                 MixProductPrice                         END                        ),     #t.ReductionTotalMoney = ((CASE                                    WHEN MixProductPrice IS NULL THEN                                        #t.NowAvgPurchasePrice                                    ELSE                                        MixProductPrice                                END                               ) - NowAvgPurchasePrice                              ) * NowBuyNum,     #t.NowTotalBuyMoney = #t.NowAvgPurchasePrice * #t.NowBuyNum FROM (     SELECT ROW_NUMBER() OVER (PARTITION BY t.CustomerID,                                            t.Single_NO,                                            t.SKU,                                            t.BuyerID                               ORDER BY m.SingleTime DESC                              ) AS rowid,            t.*,            MixProductPrice,            m.SingleTime --最低销单时间     FROM #TempProcurementBuyList t (NOLOCK) -- RB_Procurement_Detail_BuyList_MixPrice:历史最低销单价统计         LEFT JOIN RB_Procurement_Detail_BuyList_MixPrice m (NOLOCK)             ON t.SKU = m.SKU                AND t.CustomerID = m.CustomerID LEFT JOIN dbo.RB_Procurement_Detail_SingleList(NOLOCK) pds ON pds.CustomerID = m.CustomerID AND m.SingleNo=pds.Single_NO LEFT JOIN dbo.RB_Procurement_List(NOLOCK) pl ON pl.CustomerID = pds.CustomerID AND pl.P_Code = pds.P_Code     WHERE t.CustomerID = 1   -- 这个筛选条件不是很能理解,采购清单的完结状态很重要吗??   AND ((m.ListNo!='' AND pl.FinishStatus=1 AND pl.FinishTime<@nowDate AND t.LowestDate IS NULL) OR (ISNULL(m.ListNo,'')='' AND m.SingleTime<t.NowDate AND ISNULL(t.isPackagePrice,0)!=1))           AND t.P_Code <> ISNULL(pl.P_Code, '')            ) AS #t WHERE rowid = 1; UPDATE #t SET  #t.HistoryLowestDate = (CASE                          WHEN SingleTime IS NULL THEN                              #t.NowDate                          ELSE                              SingleTime                      END                     ),     #t.HistoryLowePrice = (CASE                             WHEN MixProductPrice IS NULL THEN                                 0                             ELSE                                 MixProductPrice                         END                        ), #t.HistoryReductionTotalMoney = ((CASE                                    WHEN MixProductPrice IS NULL THEN                                        #t.NowAvgPurchasePrice                                    ELSE                                        MixProductPrice                                END                               ) - NowAvgPurchasePrice                              ) * NowBuyNum     FROM (     SELECT ROW_NUMBER() OVER (PARTITION BY t.CustomerID,                                            t.Single_NO,                                            t.SKU,                                            t.BuyerID                               ORDER BY m.MixProductPrice ASC                              ) AS rowid,            t.*,            MixProductPrice,            m.SingleTime --最低销单时间     FROM #TempProcurementBuyList t (NOLOCK)         LEFT JOIN RB_Procurement_Detail_BuyList_MixPrice m (NOLOCK)             ON t.SKU = m.SKU                AND t.CustomerID = m.CustomerID LEFT JOIN dbo.RB_Procurement_Detail_SingleList(NOLOCK) pds ON pds.CustomerID = m.CustomerID AND m.SingleNo=pds.Single_NO LEFT JOIN dbo.RB_Procurement_List(NOLOCK) pl ON pl.CustomerID = pds.CustomerID AND pl.P_Code = pds.P_Code     WHERE t.CustomerID = 1   AND (( m.ListNo!='' AND pl.FinishStatus=1 AND pl.FinishTime<@nowDate --AND t.HistoryLowestDate IS NULL   ) OR  (ISNULL(m.ListNo,'')='' AND m.SingleTime<t.NowDate AND ISNULL(t.isPackagePrice,0)!=1))           AND t.P_Code <> ISNULL(pl.P_Code, '')            ) AS #t WHERE rowid = 1; UPDATE #t SET LowestDate = NowDate,     LowesBuyMoney = (CASE                          WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate < DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice11                          WHEN hh.minNowDate >= DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice12                          WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice11                      END                     ),   HistoryLowePrice = (CASE                          WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate < DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice11                          WHEN hh.minNowDate >= DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice12                          WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                               AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                              hh.NowAvgPurchasePrice11                      END                     ),     NowAvgPurchasePrice = (CASE                                WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                     AND hh.maxNowDate < DATEADD(DAY, 15, @nowDate) THEN                                    hh.NowAvgPurchasePrice11                                WHEN hh.minNowDate >= DATEADD(DAY, 15, @nowDate)                                     AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                                    hh.NowAvgPurchasePrice12                                WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                     AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate)                                     AND NowDate < DATEADD(DAY, 15, @nowDate) THEN                                    hh.NowAvgPurchasePrice11                                WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                     AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate)                                     AND NowDate >= DATEADD(DAY, 15, @nowDate) THEN                                    hh.NowAvgPurchasePrice12                            END                           ),     ReductionTotalMoney = ((CASE                                 WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                      AND hh.maxNowDate < DATEADD(DAY, 15, @nowDate) THEN                                     hh.NowAvgPurchasePrice11                                 WHEN hh.minNowDate >= DATEADD(DAY, 15, @nowDate)                                      AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                                     hh.NowAvgPurchasePrice12                                 WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                      AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                                     hh.NowAvgPurchasePrice11                             END                            ) - (CASE                                     WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                          AND hh.maxNowDate < DATEADD(DAY, 15, @nowDate) THEN                                         hh.NowAvgPurchasePrice11                                     WHEN hh.minNowDate >= DATEADD(DAY, 15, @nowDate)                                          AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate) THEN                                         hh.NowAvgPurchasePrice12                                     WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                          AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate)                                          AND NowDate < DATEADD(DAY, 15, @nowDate) THEN                                         hh.NowAvgPurchasePrice11                                     WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                                          AND hh.maxNowDate >= DATEADD(DAY, 15, @nowDate)                                          AND NowDate >= DATEADD(DAY, 15, @nowDate) THEN                                         hh.NowAvgPurchasePrice12                                 END                                )                           ) * NowBuyNum,     #t.HistoryReductionTotalMoney = ((CASE                                 WHEN hh.minNowDate < DATEADD(DAY, 15, @nowDate)                      &
历史记录  
  1. 2023-07-05 18:01:08, 由 袁慧斌 创建。
  2. 2023-07-05 19:25:58, 由 胡晓龙 指派给 许瑞丰。
    修改了 指派给,旧值为 "huxiaolong",新值为 "xuruifeng"。
    瑞丰,你看下能不能处理,如果是自定义报表的处理不了帮转龙哥
  3. 2023-07-06 10:15:35, 由 许瑞丰 指派给 黄金龙。
    修改了 指派给,旧值为 "xuruifeng",新值为 "huangjinlong"。

    原数据小组写的sql,按晓龙沟通,请龙哥帮忙安排

  4. 2023-09-21 18:13:52, 由 黄金龙 解决,方案为 性能问题 。
    修改了 解决方案,旧值为 "",新值为 "performance"。
    修改了 解决日期,旧值为 "",新值为 "2023-09-21 18:13:44"。
    修改了 指派给 ,旧值为 "huangjinlong",新值为 "yuanhuibin"。
    修改了 Bug状态 ,旧值为 "active",新值为 "resolved"。
    修改了 是否确认,旧值为 "0",新值为 "1"。
    修改了 解决者 ,旧值为 "",新值为 "huangjinlong"。
    先关了,暂时不管
  5. 2023-09-22 14:15:48, 由 袁慧斌 关闭。
    修改了 Bug状态 ,旧值为 "resolved",新值为 "closed"。
    修改了 指派给 ,旧值为 "yuanhuibin",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "yuanhuibin"。
    修改了 关闭日期,旧值为 "",新值为 "2023-09-22 14:15:48"。
  6. 2023-11-17 09:34:37, 由 刘超 编辑。
    修改了 所属模块,旧值为 "1748",新值为 "1850"。
  7. 2023-11-17 09:53:52, 由 刘超 编辑。
    修改了 所属模块,旧值为 "1850",新值为 "1863"。
所属项目 技术中心-需求池
所属模块 系统运维   性能优化
所属计划
所属迭代
Bug类型
严重程度 提示
优先级 P2
Bug状态 已关闭
业务部门
影响功能
开发责任人
测试责任人
解决时效 0
激活次数 0
激活日期
是否确认 是
当前指派 Closed 于 2023-09-22 14:15:48
截止日期 0000-00-00
上线时间
上线时效
操作系统
浏览器
关键词
抄送给
所属迭代
相关需求
相关任务
由谁创建 袁慧斌 于 2023-07-05 18:01:07
影响环境 577
由谁解决 黄金龙 于 2023-09-21 18:13:44
解决版本
解决方案 性能问题
由谁关闭 袁慧斌 于 2023-09-22 14:15:48
最后修改 刘超 于 2023-11-17 09:53:48
相关Bug