balaram19
Starting Member
9 Posts |
Posted - 2012-03-30 : 03:25:18
|
Iam using 12 tables in my query.. Iam giving the details of all tables with keys and indexes.. and executing query also.. pls gimme suggetion to improve query performance..1. tbl_audit itemsa)FK__tbl_Audit__fld_i__4C82C9D6 b)DF__tbl_Audit__fld_b__0B5E4698(constraint) 2.tbl_customer mastera)PK_tbl_CustomerMaster b)NoDupes_LongName c)NoDupes_LongName(index) d)PK_tbl_CustomerMaster(clustered index)3.tbl_inventory historya)idx_tbl_InventoryHistory_fld_intInventoryID_fld_dtCreatedDate4.tbl_inventory mastera)PK_tbl_InventoryMaster b)FK_tbl_InventoryMaster_tbl_InventoryAdjustments c)FK_tbl_InventoryMaster_tbl_UOM d)IX_tbl_InventoryMaster_fld_intCustomerID e)IX_tbl_InventoryMaster_fld_intSupplierID f)IX_tbl_InventoryMaster_fld_intTypeOfEquipment g)IX_tbl_InventoryMaster_fld_strBarCode h)IX_tbl_InventoryMaster_fld_strSerialNo i)IX_tbl_InventoryMaster_fld_strUPCCode g)PK_tbl_InventoryMaster(clustered)5.tbl_issues and returns detailsa)FK_tbl_IssuesAndReturnsDetails_tbl_DeliveryDocumentDetails b)FK_tbl_IssuesAndReturnsDetails_tbl_InventoryMaster c)FK_tbl_IssuesAndReturnsDetails_tbl_IssuesAndReturnsHeader 6)tbl_location mastera)PK_tbl_LocationMaster b)FK_tbl_LocationMaster_tbl_CustomerMaster c)FK_tbl_LocationMaster_tbl_LocationMaster d)FK_tbl_LocationMaster_tbl_po e)ix_IndexName6 f)PK_tbl_LocationMaster(clustered)6.tbl_order headera)PK_tbl_OrderHeader b)FK_tbl_OrderHeader_tbl_CostCenters c)FK_tbl_OrderHeader_tbl_CustomerMaster d)FK_tbl_OrderHeader_tbl_SupplierMaster e)FK_tbl_OrderHeader_tbl_Users_CreatedBy f)FK_tbl_OrderHeader_tbl_Users_ModifyedBy g)IX_tbl_OrderHeader_fld_intCustomerID h)IX_tbl_OrderHeader_fld_intDeliveryLocationID i)IX_tbl_OrderHeader_fld_strStatus g)PK_tbl_OrderHeader(clustered)7.tbl_order linesa)PK_tbl_OrderLines b)FK_tbl_OrderLines_tbl_OrderHeader c)PK_tbl_OrderLines(clustered)8.tbl_producthazardclassa)PK_tbl_ProductHazardClass b)FK_tbl_ProductHazardClass_tbl_Users c)NoDupes_HazardClassName d)NoDupes_HazardClassName(unique,non-clustered index) e)PK_tbl_ProductHazardClass9.tbl_region codesa)PK_fld_strRegionCode(clustered)10.tbl_supplier Mastera)PK_tbl_SupplierMaster b)NoDupes_SupplierName_CustomerID c)NoDupes_SupplierName_CustomerID(unique,non_clustered) d)PK_tbl_SupplierMaster(clustered)11.tbl_user locationsa)FK_tbl_UserLocations_tbl_LocationMaster b)FK_tbl_UserLocations_tbl_Users c)idx_tbl_UserLocations_fld_intUserID_fld_intLocationID(clustered)12.tbl_user suppliersa)FK_tbl_UserSuppliers_tbl_SupplierMaster b)FK_tbl_UserSuppliers_tbl_Users Executing query is::Declare/* @strCustomerIDs varchar(2000), @strLocationIDs varchar(max), @strPartNos varchar(max), @strSupplierIDs varchar(2000), @dtStartDate datetime, @dtEndDate datetime, @locationType varchar(10)*/ @strCustomerIDs VARCHAR(MAX), @dtStartDate DATETIME, @dtEndDate DATETIME, @strSupplierIDs VARCHAR(100), @strLocationIDs VARCHAR(MAX), @strCurrentContentPartNos VARCHAR(MAX), @strCustomerPartNos VARCHAR(MAX), @intProductSizeIDs VARCHAR(MAX), @strHazardClassIDs VARCHAR(MAX), @intAuditFlag INT , @intOwnerTypes VARCHAR(500), @strCuAccountNos VARCHAR(MAX), @strBarCodes VARCHAR(1500), @strSerialNos VARCHAR(1500), @strLOTNumber VARCHAR(50), --@strUPCCode VARCHAR(50), @strAIMOrderNo VARCHAR(50), @strSupplierOrderNo VARCHAR(50), @deliveryDocNo varchar(200), @dtCylinderExpirationDate DATETIME, @dtAnalyticalDate DATETIME, @dtHydrotestDate DATETIME, @strStatus VARCHAR(75), @intTypeOfEquipment VARCHAR(20), @intThirdPartyOwner INT, @strMSDSNo VARCHAR(50), @dtAsOnDate DATETIME, @intMultiplier INT, @iUserID INT, @noOfDaysGreaterthan int, @noOfDays int, @turnsRatio int, @strGroupBy varchar(100);set @dtStartDate = '1/Jan/2011'--set @dtEndDate = '31/Dec/2011'set @dtEndDate = '31/Mar/2011'declare @datesTable TABLE( fld_dtAsOnDate datetime)--insert into @datesTable values('2/Jan/2011');--insert into @datesTable values('3/Jan/2011');declare @i int, @days int;set @days = DATEDIFF(d, @dtStartDate, @dtEndDate);set @i = 0;while @i <= @days begin insert into @datesTable values(DATEADD(d, @i, @dtStartDate)); set @i = @i + 1; endset @iUserID = 1;--set @strCustomerIDs = ',6,11,'set @strCustomerIDs = ',';select @strCustomerIDs = @strCustomerIDs + cast(fld_intCustomerID as varchar(10)) + ',' from tbl_CustomerMasterwhere UPPER(fld_strLongName) like '%DOW%'order by fld_intCustomerID;--select @strCustomerIDsset @strCustomerIDs = LTRIM(RTRIM(@strCustomerIDs));if LEN(@strCustomerIDs) > 0 begin if LEFT(@strCustomerIDs, 1) <> ',' set @strCustomerIDs = ',' + @strCustomerIDs; if RIGHT(@strCustomerIDs, 1) <> ',' set @strCustomerIDs = @strCustomerIDs + ','; endset @strSupplierIDs = LTRIM(RTRIM(@strSupplierIDs));IF ISNULL(@strSupplierIDs,'') = '' BEGIN set @strSupplierIDs = ','; SELECT @strSupplierIDs = @strSupplierIDs + CAST(US.fld_intSupplierID AS VARCHAR(6)) + ',' FROM tbl_UserSuppliers US,tbl_SupplierMaster SM WHERE SM.fld_intSupplierID = US.fld_intSupplierID AND SM.fld_intCustomerID IN(select list_item from adm_fn_getlist(@strCustomerIDs)) AND SM.fld_bitActive = 1 AND US.fld_intUserID = @iUserID order by SM.fld_intSupplierID ENDELSE if LEN(@strSupplierIDs) > 0 begin if LEFT(@strSupplierIDs, 1) <> ',' set @strSupplierIDs = ',' + @strSupplierIDs; if RIGHT(@strSupplierIDs, 1) <> ',' set @strSupplierIDs = @strSupplierIDs + ','; endset @strLocationIDs = LTRIM(RTRIM(@strLocationIDs));IF ISNULL(@strLocationIDs,'') = '' BEGIN set @strLocationIDs = ','; SELECT @strLocationIDs = @strLocationIDs + CAST(UL.fld_intLocationID AS VARCHAR(6)) + ',' FROM tbl_UserLocations UL,tbl_LocationMaster LM WHERE LM.fld_intLocationID=UL.fld_intLocationID AND LM.fld_intCustomerID IN(select list_item from adm_fn_getlist(@strCustomerIDs)) AND LM.fld_bitActive=1 AND UL.fld_intUserID=@iUserID order by LM.fld_intLocationID ENDELSE IF LEN(@strLocationIDs) > 0 begin if LEFT(@strLocationIDs, 1) <> ',' set @strLocationIDs = ',' + @strLocationIDs; if RIGHT(@strLocationIDs, 1) <> ',' set @strLocationIDs = @strLocationIDs + ','; endset @intProductSizeIDs = LTRIM(RTRIM(@intProductSizeIDs));if LEN(@intProductSizeIDs) > 0 begin if LEFT(@intProductSizeIDs, 1) <> ',' set @intProductSizeIDs = ',' + @intProductSizeIDs; if RIGHT(@intProductSizeIDs, 1) <> ',' set @intProductSizeIDs = @intProductSizeIDs + ','; endset @strHazardClassIDs = LTRIM(RTRIM(@strHazardClassIDs));if LEN(@strHazardClassIDs) > 0 begin if LEFT(@strHazardClassIDs, 1) <> ',' set @strHazardClassIDs = ',' + @strHazardClassIDs; if RIGHT(@strHazardClassIDs, 1) <> ',' set @strHazardClassIDs = @strHazardClassIDs + ','; endset @intOwnerTypes = LTRIM(RTRIM(@intOwnerTypes));if LEN(@intOwnerTypes) > 0 begin if LEFT(@intOwnerTypes, 1) <> ',' set @intOwnerTypes = ',' + @intOwnerTypes; if RIGHT(@intOwnerTypes, 1) <> ',' set @intOwnerTypes = @intOwnerTypes + ','; endset @intTypeOfEquipment = LTRIM(RTRIM(@intTypeOfEquipment));if LEN(@intTypeOfEquipment) > 0 begin if LEFT(@intTypeOfEquipment, 1) <> ',' set @intTypeOfEquipment = ',' + @intTypeOfEquipment; if RIGHT(@intTypeOfEquipment, 1) <> ',' set @intTypeOfEquipment = @intTypeOfEquipment + ','; enddeclare @balancesTable TABLE ( fld_intID int IDENTITY(1,1) PRIMARY KEY, fld_intCustomerID int, fld_intLocationID int, fld_strPartNo varchar(100), fld_intTypeOfEquipment int, fld_strStatus varchar(10), fld_intBalance int, fld_dtAsOnDate Datetime, UNIQUE(fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus, fld_dtAsOnDate, fld_intID))--BEGIN DECLARE @inventoryTable TABLE ( fld_intID int IDENTITY(1,1) PRIMARY KEY, fld_intInventoryID int, fld_intCustomerID int, fld_intLocationID int, fld_strPartNo varchar(100), fld_intTypeOfEquipment int, fld_strStatus varchar(10), fld_intQuantity int, fld_dtAsOnDate Datetime, --fld_strFromTable varchar(2), fld_dtFromDate datetime, fld_dtToDate datetime, fld_dtDate datetime, UNIQUE(fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtAsOnDate, fld_intID) ) Declare @strStatuses varchar(20) /*if UPPER(@locationType) = 'WH' OR UPPER(@locationType) LIKE 'WARE%' set @strStatuses = ',AI,AIN,'; else set @strStatuses = ',IU,'; if ISNULL(@locationType, '') = ''---Blank means no preference. */set @strStatuses = ',AI,AIN,IU,'; ----1. Cylinders, Bulk & Bulk Stationary (All these are considered cylinders. NOT Hardgoods)insert into @inventoryTable(fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo,fld_intTypeOfEquipment, fld_strStatus, fld_intQuantity, fld_dtAsOnDate, /*fld_strFromTable,*/ fld_dtFromDate, fld_dtToDate, fld_dtDate)select fld_intInventoryID, fld_intCustomerID,fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_intQuantity/*SUM(fld_intQuantity)*/, DT.fld_dtAsOnDate--@dtAsOnDate ,/*fld_strFromTable,*/ fld_dtFromDate, fld_dtToDate, fld_dtDate FROM --X( SELECT fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtDate, MIN(fld_dtFromDate) OVER(PARTITION BY fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtDate) as fld_dtFromDate, MAX(fld_dtToDate)OVER(PARTITION BY fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtDate) as fld_dtToDate, fld_intQuantity = 1, ROW_NUMBER() OVER(PARTITION BY fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtDate ORDER BY fld_dtFromDate asc, fld_dtToDate desc ) as SNo FROM --A ( select IM.fld_intInventoryID, IM.fld_intCustomerID, IM.fld_intCurrentLocationID as fld_intLocationID, IM.fld_strCurrentContentPartNo as fld_strPartNo, IM.fld_intTypeOfEquipment, IM.fld_strStatus, fld_intQuantity = 1, IM.fld_dtModifiedDate as fld_dtFromDate, fld_dtToDate = cast('1/1/2999' as datetime), fld_dtCurrentContentDate as fld_dtDate, 'IM' as fld_strFromTable from tbl_InventoryMaster IM WITH (NOLOCK) JOIN tbl_CustomerMaster CM WITH (NOLOCK) ON (IM.fld_intCustomerID = CM.fld_intCustomerID) JOIN tbl_LocationMaster LM WITH (NOLOCK) ON (IM.fld_intCurrentLocationID = LM.fld_intLocationID) JOIN tbl_RegionCodes R with (NOLOCK)ON (R.fld_strCURegionCode = CM.fld_strRegionName) where IM.fld_strStatus in (select list_item from adm_fn_GetList(@strStatuses)) AND IM.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) AND (IM.fld_intSupplierID in (select list_item from adm_fn_GetList(@strSupplierIDs)) OR ISNULL(@strSupplierIDs,'') in ('', ',,', ',', ',0,', ',-1,')) AND (IM.fld_intCurrentLocationID in (select list_item from adm_fn_GetList(@strLocationIDs)) OR ISNULL(@strLocationIDs,'') = '') AND (IM.fld_strCurrentContentPartNo in /*(select list_item from adm_fn_GetList(@strCurrentContentPartNos))*/ (select distinct fld_strCurrentContentPartNo from tbl_InventoryMaster IM2 WITH (NOLOCK) JOIN (select list_item from adm_fn_GetList(','+@strCurrentContentPartNos+',')) as SuppParts ON (IM2.fld_strCurrentContentPartNo LIKE '%' + RTRIM(LTRIM(SuppParts.list_item)) + '%') where IM2.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strCurrentContentPartNos, '') = '' ) AND (IM.fld_strCustomerPartNo in /*(select list_item from adm_fn_GetList(@strCustomerPartNos))*/ (select distinct fld_strCustomerPartNo from tbl_InventoryMaster IM3 WITH (NOLOCK) JOIN (select list_item from adm_fn_GetList(','+@strCustomerPartNos+',')) as CustParts ON (IM3.fld_strCurrentContentPartNo LIKE '%' + RTRIM(LTRIM(CustParts.list_item)) + '%') where IM3.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strCustomerPartNos, '') = '' ) AND (IM.fld_intProductSizeID in (select list_item from adm_fn_GetList(@intProductSizeIDs)) OR ISNULL(@intProductSizeIDs,'') in ('', ',,', ',', ',0,', ',-1,')) AND (IM.fld_strHazardClass IN (Select fld_strHazardClassName FROM tbl_ProductHazardClass WHERE fld_intHazardClassID IN (select list_item from adm_fn_getlist(@strHazardClassIDs)) ) OR ISNULL(@strHazardClassIDs,'') in ('', ',,', ',', ',0,', ',-1,') ) AND ( (@intAuditFlag = 1 AND EXISTS (SELECT 1 FROM tbl_AuditItems AI WITH (NOLOCK) WHERE AI.fld_intInventoryID = IM.fld_intInventoryID AND ISNULL(fld_bitAuditFlag,0) > 0) ) OR (@intAuditFlag = 2 AND NOT EXISTS (SELECT 1 FROM tbl_AuditItems AI WITH (NOLOCK) WHERE AI.fld_intInventoryID = IM.fld_intInventoryID AND ISNULL(fld_bitAuditFlag,0) > 0) ) OR ISNULL(@intAuditFlag, 0) = 0 ) AND (IM.fld_intOwner in (select list_item from adm_fn_GetList(@intOwnerTypes)) OR ISNULL(@intOwnerTypes,'') in ('', ',,', ',', ',0,', ',-1,')) AND ( (ISNULL(R.fld_bitIsMigratedToSAP,0) = 0 AND ISNULL(LM.fld_strCUAccountNo,CM.fld_strCUAccountNo) IN(select list_item from adm_fn_getlist(','+@strCuAccountNos+','))) OR (ISNULL(R.fld_bitIsMigratedToSAP,0) > 0 AND ISNULL(LM.fld_strSAPAccountNo,CM.fld_strSAPAccountNo) IN(select list_item from adm_fn_getlist(','+@strCuAccountNos+','))) OR ISNULL(@strCuAccountNos,'') = '' ) AND ( ( @strBarCodes LIKE '%,%' AND ( IM.fld_strBarCode IN (select list_item from adm_fn_getlist(','+@strBarCodes+',')) ) ) OR ( LEN(@strBarCodes) > 0 AND (IM.fld_strBarCode LIKE '%'+@strBarCodes+'%') ) OR ISNULL(@strBarCodes, '') = '' ) AND ( ( @strSerialNos LIKE '%,%' AND (IM.fld_strSerialNo IN (select list_item from adm_fn_getlist(','+@strSerialNos+',')) ) ) OR ( LEN(@strSerialNos) > 0 AND (IM.fld_strSerialNo LIKE '%'+@strSerialNos+'%') ) OR ISNULL(@strSerialNos, '') = '' ) AND (IM.fld_strLOTNumber LIKE '%'+@strLOTNumber+'%' OR ISNULL(@strLOTNumber, '') = '') AND (IM.fld_strAIMOrderNo LIKE '%'+@strAIMOrderNo+'%' OR ISNULL(@strAIMOrderNo, '') = '') AND (IM.fld_strSupplierOrderNo LIKE '%'+@strSupplierOrderNo+'%' OR ISNULL(@strSupplierOrderNo, '') = '') AND (IM.fld_strSAPDeliveryDocNo LIKE '%'+@deliveryDocNo+'%' OR ISNULL(@deliveryDocNo, '') = '') AND ( DATEDIFF(d, IM.fld_dtCylinderExpirationDate, @dtCylinderExpirationDate) = 0 OR ISNULL(@dtCylinderExpirationDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND ( DATEDIFF(d, IM.fld_dtAnalyticalDate, @dtAnalyticalDate) = 0 OR ISNULL(@dtAnalyticalDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND ( DATEDIFF(d, IM.fld_dtHydrotestDate, @dtHydrotestDate) = 0 OR ISNULL(@dtHydrotestDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND (IM.fld_strStatus in (select list_item from adm_fn_GetList(','+@strStatus+',')) OR ISNULL(@strStatus,'') = '' ) AND (IM.fld_intTypeOfEquipment in (select list_item from adm_fn_GetList(@intTypeOfEquipment)) OR ISNULL(@intTypeOfEquipment,'') in ('', ',,', ',', ',0,', ',-1,') ) AND (IM.fld_intThirdPartyOwner = @intThirdPartyOwner OR ISNULL(@intThirdPartyOwner, 0) <= 0) AND (IM.fld_strCurrentContentPartNo in (select distinct fld_strSupplierPartNo from tbl_OrderLines OL WITH (NOLOCK) JOIN tbl_OrderHeader OH WITH (NOLOCK) ON (OH.fld_strAIMOrderNo = OL.fld_strAIMOrderNo) where OL.fld_strMSDSNo LIKE '%' + @strMSDSNo + '%' AND OH.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strMSDSNo, '') = '' ) AND IM.fld_intTypeOfEquipment in (1,4,5) AND DATEDIFF(d, IM.fld_dtModifiedDate, @dtEndDate) >= 0 ---->DATE CONDITION UNION ALL select IH.fld_intInventoryID, IH.fld_intCustomerID, IH.fld_intLocationID, IH.fld_strPartNo, IH.fld_intTypeOfEquipment, IH.fld_strStatus, fld_intQuantity = 1, min(IH.fld_dtFromDate) as fld_dtFromDate, max(IH.fld_dtToDate) as fld_dtToDate, IH.fld_dtDate, 'IH' as fld_strFromTable FROM tbl_InventoryHistory IH WITH (NOLOCK) JOIN tbl_CustomerMaster CM WITH (NOLOCK) ON (IH.fld_intCustomerID = CM.fld_intCustomerID) JOIN tbl_LocationMaster LM WITH (NOLOCK) ON (IH.fld_intLocationID = LM.fld_intLocationID) JOIN tbl_RegionCodes R with (NOLOCK)ON (R.fld_strCURegionCode = CM.fld_strRegionName) WHERE IH.fld_strStatus in (select list_item from adm_fn_GetList(@strStatuses)) AND IH.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) AND (IH.fld_intSupplierID in (select list_item from adm_fn_GetList(@strSupplierIDs)) OR ISNULL(@strSupplierIDs,'') = '') AND (IH.fld_intLocationID in (select list_item from adm_fn_GetList(@strLocationIDs)) OR ISNULL(@strLocationIDs, '') = '') AND (IH.fld_strPartNo in /*(select list_item from adm_fn_GetList(@strCurrentContentPartNos))*/ (select distinct fld_strPartNo from tbl_InventoryHistory IH2 WITH (NOLOCK) JOIN (select list_item from adm_fn_GetList(','+@strCurrentContentPartNos+',')) as SuppParts ON (IH2.fld_strPartNo LIKE '%' + RTRIM(LTRIM(SuppParts.list_item)) + '%') where IH2.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strCurrentContentPartNos,'') = '' ) AND (IH.fld_strCustomerPartNo in /*(select list_item from adm_fn_GetList(@strCustomerPartNos))*/ (select distinct fld_strCustomerPartNo from tbl_InventoryHistory IH3 WITH (NOLOCK) JOIN (select list_item from adm_fn_GetList(','+@strCustomerPartNos+',')) as CustParts ON (IH3.fld_strCustomerPartNo LIKE '%' + RTRIM(LTRIM(CustParts.list_item)) + '%') where IH3.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strCustomerPartNos, '') = '' ) AND (IH.fld_intProductSizeID in (select list_item from adm_fn_GetList(@intProductSizeIDs)) OR ISNULL(@intProductSizeIDs,'') in ('', ',,', ',', ',0,', ',-1,')) AND (IH.fld_strHazardClass IN (Select fld_strHazardClassName FROM tbl_ProductHazardClass WHERE fld_intHazardClassID IN (select list_item from adm_fn_getlist(@strHazardClassIDs)) ) OR ISNULL(@strHazardClassIDs,'') in ('', ',,', ',', ',0,', ',-1,') ) AND ( (@intAuditFlag = 1 AND EXISTS (SELECT 1 FROM tbl_AuditItems AI WITH (NOLOCK) WHERE AI.fld_intInventoryID = IH.fld_intInventoryID AND ISNULL(fld_bitAuditFlag,0) > 0) ) OR (@intAuditFlag = 2 AND NOT EXISTS (SELECT 1 FROM tbl_AuditItems AI WITH (NOLOCK) WHERE AI.fld_intInventoryID = IH.fld_intInventoryID AND ISNULL(fld_bitAuditFlag,0) > 0) ) OR ISNULL(@intAuditFlag, 0) = 0 ) AND (IH.fld_intOwner in (select list_item from adm_fn_GetList(@intOwnerTypes)) OR ISNULL(@intOwnerTypes,'') in ('', ',,', ',', ',0,', ',-1,')) AND ( (ISNULL(R.fld_bitIsMigratedToSAP,0) = 0 AND ISNULL(LM.fld_strCUAccountNo,CM.fld_strCUAccountNo) IN(select list_item from adm_fn_getlist(','+@strCuAccountNos+','))) OR (ISNULL(R.fld_bitIsMigratedToSAP,0) > 0 AND ISNULL(LM.fld_strSAPAccountNo,CM.fld_strSAPAccountNo) IN(select list_item from adm_fn_getlist(','+@strCuAccountNos+','))) OR ISNULL(@strCuAccountNos,'') = '' ) AND ( ( @strBarCodes LIKE '%,%' AND ( IH.fld_strBarCode IN (select list_item from adm_fn_getlist(','+@strBarCodes+',')) ) ) OR ( LEN(@strBarCodes) > 0 AND (IH.fld_strBarCode LIKE '%'+@strBarCodes+'%') ) OR ISNULL(@strBarCodes, '') = '' ) AND ( ( @strSerialNos LIKE '%,%' AND ( IH.fld_strSerialNo IN (select list_item from adm_fn_getlist(','+@strSerialNos+',')) ) ) OR ( LEN(@strSerialNos) > 0 AND (IH.fld_strSerialNo LIKE '%'+@strSerialNos+'%') ) OR ISNULL(@strSerialNos, '') = '' ) AND (IH.fld_strLOTNumber LIKE '%'+@strLOTNumber+'%' OR ISNULL(@strLOTNumber, '') = '') AND (IH.fld_strAIMOrderNo LIKE '%'+@strAIMOrderNo+'%' OR ISNULL(@strAIMOrderNo, '') = '') AND (IH.fld_strSupplierOrderNo LIKE '%'+@strSupplierOrderNo+'%' OR ISNULL(@strSupplierOrderNo, '') = '') AND (IH.fld_strSAPDeliveryDocNo LIKE '%'+@deliveryDocNo+'%' OR ISNULL(@deliveryDocNo, '') = '') AND ( DATEDIFF(d, IH.fld_dtCylinderExpirationDate, @dtCylinderExpirationDate) = 0 OR ISNULL(@dtCylinderExpirationDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND ( DATEDIFF(d, IH.fld_dtAnalyticalDate, @dtAnalyticalDate) = 0 OR ISNULL(@dtAnalyticalDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND ( DATEDIFF(d, IH.fld_dtHydrotestDate, @dtHydrotestDate) = 0 OR ISNULL(@dtHydrotestDate, cast('1/1/1900' as datetime)) = cast('1/1/1900' as datetime) ) AND (IH.fld_strStatus in (select list_item from adm_fn_GetList(','+@strStatus+',')) OR ISNULL(@strStatus,'') = '' ) AND (IH.fld_intTypeOfEquipment in (select list_item from adm_fn_GetList(@intTypeOfEquipment)) OR ISNULL(@intTypeOfEquipment,'') in ('', ',,', ',', ',0,', ',-1,') ) AND (IH.fld_intThirdPartyOwner = @intThirdPartyOwner OR ISNULL(@intThirdPartyOwner, 0) <= 0) AND (IH.fld_strPartNo in (select distinct fld_strSupplierPartNo from tbl_OrderLines OL WITH (NOLOCK) JOIN tbl_OrderHeader OH WITH (NOLOCK) ON (OH.fld_strAIMOrderNo = OL.fld_strAIMOrderNo) where OL.fld_strMSDSNo LIKE '%' + @strMSDSNo + '%' AND OH.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) ) OR ISNULL(@strMSDSNo, '') = '' ) AND IH.fld_intTypeOfEquipment in (1,4,5) AND ( DATEDIFF(d, IH.fld_dtDate, @dtEndDate) >= 0 AND DATEDIFF(d, IH.fld_dtToDate, @dtStartDate) < 0 ) ---->DATE CONDITION group by IH.fld_intCustomerID, IH.fld_intLocationID, IH.fld_intInventoryID, IH.fld_strPartNo, IH.fld_intTypeOfEquipment, IH.fld_strStatus, IH.fld_dtDate ) AS A --GROUP BY fld_intInventoryID, fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtDate ) as XJOIN @datesTable DT ON (DATEDIFF(d, X.fld_dtDate, DT.fld_dtAsOnDate) >= 0 AND DATEDIFF(d, ISNULL(X.fld_dtToDate, cast('1/1/2999' as datetime)), DT.fld_dtAsOnDate) < 0 AND X.SNo = 1)WHERE X.SNo = 1 --group by fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, DT.fld_dtAsOnDate -------------------------------end of cylinders, bul, bulk stationary --select * from @inventoryTable--select distinct fld_intInventoryID, fld_strFromTable, fld_dtFromDate, fld_dtToDate, fld_strStatus --from @inventoryTable--order by 1,3,4,2 --Now group all the returns UPDATE @inventoryTable SET fld_strStatus = 'RETURNS' where (fld_strStatus like 'RT%' OR fld_strStatus like 'WP%') --Now group all the issues UPDATE @inventoryTable SET fld_strStatus = 'ISSUES' where fld_strStatus in ('AIN','AI','IU')--NOW PUT THE TOTALS INTO THE RESULT OBJECT insert into @balancesTable ( fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_intBalance, fld_dtAsOnDate ) select fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, SUM(fld_intQuantity), fld_dtAsOnDate from @inventoryTable group by fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, fld_dtAsOnDate declare @invIDs varchar(max)set @invIDs = ','select @invIDs = @invIDs + ISNULL(fld_intInventoryID + ',', ',') from (select distinct cast(fld_intInventoryID as varchar(8)) as fld_intInventoryID from @inventoryTable) AS A declare @locations varchar(max) set @locations = ',' select @locations = @locations + ISNULL(fld_intLocationID + ',', ',') from (select distinct cast(fld_intLocationID as varchar(8)) as fld_intLocationID from @inventoryTable) AS A declare @partNos varchar(max) set @partNos = ',' select @partNos = @partNos + ISNULL(fld_strPartNo + ',', ',') from (select distinct fld_strPartNo from @inventoryTable) AS A -------- DECLARE @TotalShipmentsTable TABLE ( fld_intCustomerID int, fld_intLocationID int, fld_strPartNo varchar(100), --fld_strStatus varchar(10), fld_intIssues int, fld_intReturns int ) Declare @shipmentsTable TABLE ( fld_intCustomerID int, fld_intLocationID int, fld_strPartNo varchar(100), fld_strStatus varchar(10), fld_intShipments int ) declare @fromDate datetime set @fromDate = dbo.fn_getDatePart(@dtStartDate); declare @toDate datetime set @toDate = dbo.fn_getDatePart(@dtEndDate); Declare @strStatusesFN varchar(20) set @strStatusesFN = ',IU,AI,AIN,WP,WP-FULL,WP-RGA,RT,RT-FULL,RT-RGA,'; INSERT INTO @shipmentsTable(fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus,fld_intShipments) SELECT LM.fld_intCustomerID, ISD.fld_intDeliveryLocationID, ISD.fld_strSupplierPartNo, ISD.fld_strType, fld_intShipments = 1--(CASE WHEN (IM.fld_intTypeOfEquipment in (1,4,5)) then 1 else ISNULL(ISD.fld_intUPCQty,1) END) FROM tbl_IssuesAndReturnsDetails ISD WITH (NOLOCK) JOIN tbl_InventoryMaster IM WITH(NOLOCK) ON (ISD.fld_intInventoryID = IM.fld_intInventoryID /*AND IM.fld_intTypeOfEquipment in (1,4,5)*/) JOIN tbl_LocationMaster LM WITH(NOLOCK) ON (LM.fld_intLocationID = ISD.fld_intDeliveryLocationID) WHERE ISD.fld_strType in (select list_item from adm_fn_GetList(@strStatusesFN)) -- AND dbo.fn_getDatePart(ISD.fld_dtShipReturnDate) >= @fromDate AND dbo.fn_getDatePart(ISD.fld_dtShipReturnDate) <= @toDate AND (dbo.fn_getDatePart(ISD.fld_dtShipReturnDate) BETWEEN @fromDate AND @toDate) AND LM.fld_intCustomerID in (select list_item from adm_fn_GetList(@strCustomerIDs)) AND ISD.fld_intDeliveryLocationID in (select list_item from adm_fn_GetList(@locations)) AND ISD.fld_strSupplierPartNo in (select list_item from adm_fn_GetList(@partNos)) AND IM.fld_intTypeOfEquipment in (1,4,5/*,3 is this 3 needed?*/) AND (IM.fld_intSupplierID in (select list_item from adm_fn_GetList(@strSupplierIDs)) OR ISNULL(@strSupplierIDs, '') = '') AND (ISD.fld_intInventoryID in (select list_item from adm_fn_GetList(@invIDs)) OR ISNULL(@invIDs, '') = '' ) --Now group all the returns UPDATE @shipmentsTable SET fld_strStatus = 'RETURNS' where (fld_strStatus like 'RT%' OR fld_strStatus like 'WP%') --Now group all the issues UPDATE @shipmentsTable SET fld_strStatus = 'ISSUES' where fld_strStatus in ('AIN','AI','IU') --Put the total into the results table INSERT INTO @TotalShipmentsTable ( fld_intCustomerID , fld_intLocationID , fld_strPartNo , --fld_strStatus, fld_intIssues, fld_intReturns ) select ISNULL(Iss.fld_intcustomerID, Rets.fld_intcustomerID), ISNULL(Iss.fld_intLocationID, Rets.fld_intLocationID), ISNULL(Iss.fld_strPartNo, Rets.fld_strPartNo), Iss.fld_intShipments, Rets.fld_intShipments From ( select fld_intcustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus, SUM(fld_intShipments) as fld_intShipments FROM @shipmentsTable where fld_strStatus = 'ISSUES' GROUP BY fld_intcustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus ) as Iss FULL OUTER JOIN ( select fld_intcustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus, SUM(fld_intShipments) as fld_intShipments FROM @shipmentsTable where fld_strStatus = 'RETURNS' GROUP BY fld_intcustomerID, fld_intLocationID, fld_strPartNo, fld_strStatus ) as Rets ON (Iss.fld_intcustomerID = Rets.fld_intcustomerID AND Iss.fld_intLocationID = Rets.fld_intLocationID AND Iss.fld_strPartNo = Rets.fld_strPartNo )-------------------------------------select ISNULL(BAL.fld_intCustomerID, SHP.fld_intCustomerID), ISNULL(BAL.fld_intLocationID, SHP.fld_intLocationID), ISNULL(BAL.fld_strPartNo, SHP.fld_strPartNo), BAL.minBal as MinBalance, BAL.MaxBal as MaxBalance, BAL.avgForPeriod as AvgBalance, SHP.fld_intIssues as QtyIssued, SHP.fld_intReturns as QtyReturned, fld_intTurnsRatio = Cast( ( (Cast(BAL.avgForPeriod as Decimal(18,2)) * @days) / (Cast(SHP.fld_intIssues as Decimal(18,2)) * 30) ) as Decimal(18,2) ), OPENBAL.fld_intBalance as OpeningBalanceFROM( select fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus, MIN(fld_intBalance) as minBal, MAX(fld_intBalance) as maxBal, cast(AVG(cast(fld_intBalance as decimal(18,2))) as decimal(18,2)) as avgBal, SUM(fld_intBalance) as sumBal, COUNT(*) as noOfDaysUtilized, cast((cast(SUM(fld_intBalance) as decimal(18,2))/cast(@days+1 as decimal(18,2))) as decimal(18,2)) as avgForPeriod from @balancesTable group by fld_intCustomerID, fld_intLocationID, fld_strPartNo, fld_intTypeOfEquipment, fld_strStatus) as BALFULL OUTER JOIN @TotalShipmentsTable /*dbo.rpt_fn_GetShipmentsAndReturnsInPeriod(@strCustomerIDs,@locations,@partNos,@strSupplierIDs, NULL, @dtStartDate, @dtEndDate, @invIDs, 'LOCATION' ) as*/ SHP ON (SHP.fld_intCustomerID = BAL.fld_intCustomerID AND SHP.fld_intLocationID = BAL.fld_intLocationID AND SHP.fld_strPartNo = BAL.fld_strPartNo --AND SHP.fld_strStatus = BAL.fld_strStatus )LEFT OUTER JOIN (select * from @balancesTable where fld_dtAsOnDate = @dtStartDate and fld_strStatus = 'ISSUES') as OPENBAL ON (OPENBAL.fld_intCustomerID = BAL.fld_intCustomerID AND OPENBAL.fld_intLocationID = BAL.fld_intLocationID AND OPENBAL.fld_strPartNo = BAL.fld_strPartNo AND OPENBAL.fld_strStatus = BAL.fld_strStatus ) --ENDgimme suggetions to improve performance of above query..thankxivbalaram |
|
|