【SQLServer】临时表的一些应用
–create Index Index_Status_Header_UpdateTime on Status_Header (event_code,update_datetime) CREATE PROC sp_DeliveryPerformanceReport AS IF EXISTS(SELECT 1 FROM tempdb.dbo.sysobjects WHERE id = OBJECT_ID(N'tempdb.dbo.#TempTableForOutForDeliveryTracking') AND TYPE='U' ) --check the temp table BEGIN DROP TABLE #TempTableForOutForDeliveryTracking END CREATE TABLE #TempTableForOutForDeliveryTracking ( Shipment_Id CHAR(18),Staff_Code CHAR(5),Event_Date_Time DATETIME,Event_Code CHAR(2),) INSERT INTO #TempTableForOutForDeliveryTracking (Shipment_Id,Staff_Code,Event_Date_Time,Event_Code) SELECT ts.Shipment_Id,ts.Staff_Code,MAX(pt.Event_date_time),pt.Event_Code FROM #TempTableForOutForDeliveryShipment ts INNER JOIN Package_Tracker pt ON ts.Shipment_Id = pt.Shipment_Id WHERE pt.Event_Code IN ('LI','OI') OR (pt.Event_Code IN ('PE','CH','CP','DR') AND Event_Type = 'D') GROUP BY ts.Shipment_Id,pt.Event_Code --SELECT Staff_Code,--SUM(DATEDIFF(mm,(CASE WHEN Event_Code IN ('LI','OI') THEN MAX(Event_Date_Time) THEN NULL END),(CASE WHEN Event_Code IN ('PE','DR') THEN MAX(Event_Date_Time) THEN NULL END))) --COUNT(DISTINCT Shipment_Id) --FROM #TempTableForOutForDeliveryTracking --GROUP BY Staff_Code SELECT Staff_Code,SUM(DATEDIFF(mi,StartDate,ISNULL(EndDate,DATEADD(dd,1,@EndDate)))) /COUNT(*) AS WADT,Count(*) AS Counts FROM ( SELECT Shipment_Id,MAX(CASE WHEN Event_Code IN ('LI','OI') THEN Event_Date_Time ELSE NULL END) StartDate,MAX(CASE WHEN Event_Code IN ('PE','DR') THEN Event_Date_Time ELSE NULL END) EndDate FROM #TempTableForOutForDeliveryTracking GROUP BY Shipment_Id,Staff_Code ) AS a GROUP BY Staff_Code ORDER BY WADT END (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |