|
以前的分页我都是主子表join查询,然后会出现下面的记录形式,返回时一个数据集合 泠云工作室 订单1 明细1.1 订单1 明细1.2 订单1 明细1.3 订单2 明细2.1 订单2 明细2.2
copyright lyttzx.com 这样的话,就造成大量的数据冗余,就是【订单1】的数据被重复多次从数据库读取。这次我尝试将他们分开返回,返回两个数据集合 泠云工作室 泠云工作室 订单集合 本文来自泠云天天在线 本文来自泠云天天在线 copyright lyttzx.com
泠云工作室 订单1 订单2 订单3
本文来自泠云天天在线 明细集合 内容来自泠云天天在线
泠云工作室 明细1.1 明细1.2 明细1.3 明细2.1 明细2.2
copyright lyttzx.com copyright lyttzx.com 这样的结果不知道会不会有效率提升,还有待测试。但是数据量少了,联合的数据量也少了。以前需要联合整张订单表和整张明细表,现在首先将符合条件的订单找到,然后用符合条件的订单和明细表联合,直接查找符合条件的订单的明细,目标明确了。 本文来自泠云天天在线 当然了,找到的符合条件的订单还是放在零时表中,然后用临时表和明细表进行inner join查询明细信息。 泠云工作室
本文来自泠云天天在线 代码 DECLARE @begintime DATETIME SET @begintime= GETDATE() 泠云工作室 --查询代理人所在村的订单 --参数部分 DECLARE @PageIndex INT, --指定页 @PageSize INT, --每页记录数 copyright lyttzx.com @TotalNumber INT, --返回记录总数 @AgentID VARCHAR(36), --代理人ID @GoodsName VARCHAR(50), 本文来自泠云天天在线 @OrderSeqNo VARCHAR(36), @FarmerName VARCHAR(50), @OrderStatus VARCHAR(6), @CompanyName VARCHAR(100), 泠云工作室 @PlaceTimeStart DATETIME, @PlaceTimeEnd DATETIME --参数赋值 SET @PageIndex=11 SET @PageSize=10 copyright lyttzx.com SET @AgentID='0ff6f6e1-a111-4523-bbd0-4ce28e8dda56' SET @GoodsName='' SET @OrderSeqNo='' SET @FarmerName='' 本文来自泠云天天在线 SET @OrderStatus='' SET @CompanyName='' -- @PlaceTimeStart DATETIME, -- @PlaceTimeEnd DATETIME --临时变量定义 DECLARE @VillageID VARCHAR(36) --村ID lyttzx.com SELECT @VillageID=ai.VillageID FROM AgentInfo ai WHERE ai.AgentID=@AgentID --临时表#PurchaseDoc,仅用于存储查询出来的PurchaseDocID和农民Name DECLARE @PurchaseDoc TABLE ( PurchaseDocID VARCHAR(36), lyttzx.com [NAME] VARCHAR(50) ); --查询指定村的购买单号和农民名字到#PurchaseDoc INSERT INTO @PurchaseDoc(PurchaseDocID,[NAME]) SELECT pd.PurchaseDocID,pi1.[Name] 泠云工作室 FROM PurchaseDoc pd INNER JOIN PlanterInfo pi1 ON pd.PlanterID=pi1.PlanterID WHERE pi1.VillageID=@VillageID --获取记录总数,未设置查询条件 SELECT @TotalNumber=COUNT(*) 本文来自泠云天天在线 FROM OrderInfo oi INNER JOIN @PurchaseDoc ON oi.PurchaseDocID=[@PurchaseDoc].PurchaseDocID AND [@PurchaseDoc].[NAME] LIKE '%'+@FarmerName+'%' lyttzx.com INNER JOIN CompanyInfo ci ON oi.CompanyID=ci.CompanyID AND oi.GoodsName LIKE '%'+@GoodsName+'%' AND oi.OrderSeqNO LIKE '%'+@OrderSeqNo+'%' 内容来自泠云天天在线 AND ci.CompanyName LIKE '%'+@CompanyName+'%' And oi.OrderStatus LIKE '%'+@OrderStatus+'%' copyright lyttzx.com AND (oi.PlaceTime BETWEEN ISNULL(@PlaceTimeStart,'1900-01-01') AND ISNULL(@PlaceTimeEnd,'9999-12-31')) ; --定义并计算指定页首记录编号 泠云工作室 DECLARE @StartNumber INT,@TotalPages INT SET @TotalPages=CEILING(@TotalNumber/@PageSize) SET @StartNumber= 泠云工作室 CASE WHEN @PageIndex<=1 THEN 1 WHEN @PageIndex>@TotalPages THEN (@TotalPages-1)*@PageSize+1 本文来自泠云天天在线 ELSE (@PageIndex-1)*@PageSize+1 END; --临时订单表 DECLARE @OrderInfo TABLE ( OrderSeqNO VARCHAR(36), lyttzx.com GoodsName VARCHAR(50), --CompanyID VARCHAR(36), CompanyName VARCHAR(100), GoodsType VARCHAR(3), OrderAmount DECIMAL(12,2), lyttzx.com PlaceTime DATETIME, DeliveryTime DATETIME, OrderStatus VARCHAR(6), PurchaseDocID VARCHAR(36), GoodsID VARCHAR(36) ); --查询当前页的订单信息到临时订单表 lyttzx.com WITH cte AS ( SELECT ROW_NUMBER() OVER (ORDER BY oi.PlaceTime DESC) AS RowNumber, oi.OrderSeqNO , oi.GoodsName , --oi.CompanyID, 泠云工作室 ci.CompanyName , oi.GoodsType , oi.OrderAmount , oi.PlaceTime , oi.DeliveryTime , oi.OrderStatus, oi.PurchaseDocID, oi.GoodsID FROM OrderInfo oi INNER JOIN @PurchaseDoc 本文来自泠云天天在线 ON oi.PurchaseDocID=[@PurchaseDoc].PurchaseDocID AND [@PurchaseDoc].[NAME] LIKE '%'+@FarmerName+'%' lyttzx.com INNER JOIN CompanyInfo ci ON oi.CompanyID=ci.CompanyID AND oi.GoodsName LIKE '%'+@GoodsName+'%' AND oi.OrderSeqNO LIKE '%'+@OrderSeqNo+'%' lyttzx.com AND ci.CompanyName LIKE '%'+@CompanyName+'%' And oi.OrderStatus LIKE '%'+@OrderStatus+'%' 本文来自泠云天天在线 AND (oi.PlaceTime BETWEEN ISNULL(@PlaceTimeStart,'1900-01-01') AND ISNULL(@PlaceTimeEnd,'9999-12-31')) ) INSERT INTO @OrderInfo 泠云工作室 SELECT cte.OrderSeqNO , cte.GoodsName , --cte.CompanyID , cte.CompanyName, cte.GoodsType , cte.OrderAmount , cte.PlaceTime , cte.DeliveryTime , cte.OrderStatus, cte.PurchaseDocID, cte.GoodsID FROM cte WHERE RowNumber BETWEEN @StartNumber AND (@StartNumber+@PageSize-1) 本文来自泠云天天在线 --获取用于显示的订单信息 SELECT oi.OrderSeqNO, oi.GoodsName, --ci.CompanyName, oi.CompanyName, oi.GoodsType, oi.OrderAmount, oi.PlaceTime, oi.DeliveryTime, oi.OrderStatus, pd.[NAME] 内容来自泠云天天在线 FROM @OrderInfo oi INNER JOIN @PurchaseDoc pd ON oi.PurchaseDocID=pd.PurchaseDocID --INNER JOIN CompanyInfo ci ON oi.CompanyID=ci.CompanyID --获取订单的详细信息 --SELECT vpps.PkgAmount,vpps.UnitCnName,vpps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO 泠云工作室 -- FROM OrderDetail od --INNER JOIN @OrderInfo oi ON od.OrderSeqNO=oi.OrderSeqNO --INNER JOIN View_ProductPkgSpec vpps ON od.GoodsID=vpps.PkgSpecID SELECT sps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='2' 泠云工作室 INNER JOIN SeedPkgSpec sps ON od.GoodsID=sps.SeedPkgSpecID INNER JOIN Unit u ON sps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON sps.PkgSpecName=ps.PkgSpecCode lyttzx.com UNION SELECT pps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='3' 泠云工作室 INNER JOIN PesPkgSpec pps ON od.GoodsID=pps.PesPkgSpecID INNER JOIN Unit u ON pps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON pps.PkgSpecName=ps.PkgSpecCode copyright lyttzx.com UNION SELECT fps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='4' 泠云工作室 INNER JOIN FertPkgSpec fps ON od.GoodsID=fps.FertPkgSpecID INNER JOIN Unit u ON fps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON fps.PkgSpecName=ps.PkgSpecCode 泠云工作室 SELECT DATEDIFF(ms,@begintime,GETDATE()) lyttzx.com copyright lyttzx.com
内容来自泠云天天在线 代码 DECLARE @begintime DATETIME SET @begintime= GETDATE() copyright lyttzx.com --查询厂商订单,OrderStatus条件未设置 --参数部分 DECLARE @PageIndex INT, --指定页 @PageSize INT, --每页记录数 内容来自泠云天天在线 @TotalNumber INT, --返回记录总数 @CompanyID VARCHAR(36), --厂商ID @DisCode VARCHAR(12), 内容来自泠云天天在线 @GoodsName VARCHAR(50), @GoodsType VARCHAR(3), @OrderAmountStart DECIMAL(12,2), @OrderAmountEnd DECIMAL(12,2), 泠云工作室 @PlaceTimeStart DATETIME, @PlaceTimeEnd DATETIME --@OrderStatus VARCHAR(6) --参数赋值 SET @PageIndex=110 SET @PageSize=10 copyright lyttzx.com SET @CompanyID='22177BE9-AA3F-4F3C-ABDC-5AB2ECD50658' SET @DisCode='' SET @GoodsName='' SET @GoodsType='' 泠云工作室 SET @OrderAmountStart=0 SET @OrderAmountEnd=9999999999.99 --去掉地域代码参数右侧为0的部分 SET @DisCode= CASE 泠云工作室 WHEN @DisCode LIKE '__0000000000' THEN LEFT(@DisCode,2) WHEN @DisCode LIKE '____00000000' THEN LEFT(@DisCode,4) 泠云工作室 WHEN @DisCode LIKE '______000000' THEN LEFT(@DisCode,6) WHEN @DisCode LIKE '_________000' THEN LEFT(@DisCode,9) 泠云工作室 ELSE @DisCode END; --获取记录总数,未设置查询条件 SELECT @TotalNumber=COUNT(*) FROM OrderInfo oi INNER JOIN PurchaseDoc pd ON oi.PurchaseDocID=pd.PurchaseDocID 本文来自泠云天天在线 AND oi.CompanyID=@CompanyID AND pd.DisCode LIKE @DisCode+'%' AND oi.GoodsName LIKE '%'+@GoodsName+'%' 内容来自泠云天天在线 AND oi.GoodsType LIKE '%'+@GoodsType+'%' AND oi.OrderAmount BETWEEN @OrderAmountStart AND @OrderAmountEnd 内容来自泠云天天在线 AND oi.PlaceTime BETWEEN ISNULL(@PlaceTimeStart,'1900-01-01') AND ISNULL(@PlaceTimeEnd,'9999-12-31') --And (其他条件)oi.OrderStatus= 本文来自泠云天天在线 --定义并计算指定页首记录编号 DECLARE @StartNumber INT,@TotalPages INT SET @TotalPages=CEILING(@TotalNumber/@PageSize) lyttzx.com SET @StartNumber= CASE WHEN @PageIndex<=1 THEN 1 WHEN @PageIndex>@TotalPages THEN (@TotalPages-1)*@PageSize+1 内容来自泠云天天在线 ELSE (@PageIndex-1)*@PageSize+1 END; --临时订单表 DECLARE @OrderInfo TABLE ( 内容来自泠云天天在线 OrderSeqNO VARCHAR(36), GoodsName VARCHAR(50), GoodsType VARCHAR(3), OrderAmount DECIMAL(12,2), PlaceTime DATETIME, 本文来自泠云天天在线 Consignee VARCHAR(50), ConsigneeTel VARCHAR(20), PurchaseDocID VARCHAR(36), ArrivalTime DATETIME, ConsigneeAddress VARCHAR(200), 内容来自泠云天天在线 PostCode VARCHAR(6) ); --查询当前页的订单信息到临时订单表 WITH cte AS ( SELECT ROW_NUMBER() OVER (ORDER BY oi.PlaceTime ASC) AS RowNumber, copyright lyttzx.com oi.OrderSeqNO , oi.GoodsName , oi.GoodsType , oi.OrderAmount , oi.PlaceTime , pd.Consignee , pd.ConsigneeTel , pd.PurchaseDocID, oi.ArrivalTime, pd.ConsigneeAddress, pd.PostCode lyttzx.com FROM OrderInfo oi INNER JOIN PurchaseDoc pd ON oi.PurchaseDocID=pd.PurchaseDocID AND oi.CompanyID=@CompanyID AND pd.DisCode LIKE @DisCode+'%' 泠云工作室 AND oi.GoodsName LIKE '%'+@GoodsName+'%' AND oi.GoodsType LIKE '%'+@GoodsType+'%' lyttzx.com AND oi.OrderAmount BETWEEN @OrderAmountStart AND @OrderAmountEnd AND oi.PlaceTime BETWEEN ISNULL(@PlaceTimeStart,'1900-01-01') AND ISNULL(@PlaceTimeEnd,'9999-12-31') 本文来自泠云天天在线 --And (其他条件)oi.OrderStatus= ) INSERT INTO @OrderInfo( OrderSeqNO, GoodsName , GoodsType , OrderAmount, PlaceTime, Consignee , ConsigneeTel , PurchaseDocID, ArrivalTime, ConsigneeAddress, PostCode ) SELECT cte.OrderSeqNO, 内容来自泠云天天在线 cte.GoodsName , cte.GoodsType , cte.OrderAmount, cte.PlaceTime, cte.Consignee , cte.ConsigneeTel , cte.PurchaseDocID, cte.ArrivalTime, cte.ConsigneeAddress, cte.PostCode FROM cte WHERE cte.RowNumber BETWEEN @StartNumber AND (@StartNumber+@PageSize-1) 本文来自泠云天天在线 --获取订单信息 SELECT oi.* FROM @OrderInfo oi --获取订单的详细信息 --SELECT vpps.PkgAmount,vpps.UnitCnName,vpps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO -- FROM OrderDetail od --INNER JOIN @OrderInfo oi ON od.OrderSeqNO=oi.OrderSeqNO 泠云工作室 --INNER JOIN View_ProductPkgSpec vpps ON od.GoodsID=vpps.PkgSpecID SELECT sps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='2' copyright lyttzx.com INNER JOIN SeedPkgSpec sps ON od.GoodsID=sps.SeedPkgSpecID INNER JOIN Unit u ON sps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON sps.PkgSpecName=ps.PkgSpecCode 泠云工作室 UNION SELECT pps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='3' lyttzx.com INNER JOIN PesPkgSpec pps ON od.GoodsID=pps.PesPkgSpecID INNER JOIN Unit u ON pps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON pps.PkgSpecName=ps.PkgSpecCode 内容来自泠云天天在线 UNION SELECT fps.PkgAmount,u.UnitCnName,ps.PkgSpecName,od.Qty,od.UnitPrice,od.OrderSeqNO FROM @OrderInfo oi INNER JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO AND oi.GoodsType='4' copyright lyttzx.com INNER JOIN FertPkgSpec fps ON od.GoodsID=fps.FertPkgSpecID INNER JOIN Unit u ON fps.Unit=u.UnitCode INNER JOIN PkgSpec ps ON fps.PkgSpecName=ps.PkgSpecCode 泠云工作室 SELECT DATEDIFF(ms,@begintime,GETDATE()) |


