如何使用sql server减少存储过程的计时?
它执行的时间更长。如何缩短时间?在等待电子邮件时,我能够将其从动态查询内容中转换出来。每当您看到这样一个过滤器使用传入的字段时,9/10将总是更加高效地左外连接您的过滤器表并使用如下内容:如何使用sql server减少存储过程的计时?,sql,windows,Sql,Windows,它执行的时间更长。如何缩短时间?在等待电子邮件时,我能够将其从动态查询内容中转换出来。每当您看到这样一个过滤器使用传入的字段时,9/10将总是更加高效地左外连接您的过滤器表并使用如下内容: CREATE Procedure SearchData ( @Lastname Varchar(250), @Firstname Varchar(25), @City varchar(50), @Address1 varchar(40), @HullID varchar(50), @State varchar
CREATE Procedure SearchData ( @Lastname Varchar(250), @Firstname Varchar(25), @City varchar(50),
@Address1 varchar(40),
@HullID varchar(50),
@State varchar(50),
@Status varchar(15),
@Accountpk varchar(40),
@Agentpk varchar(1000),
@Issuecopk varchar(40),
@Productpk varchar(40), @UserType varchar(15), @UserID varchar(30) ) As Begin Set NOCOUNT ON
Declare @Selectionquery As Varchar(8000)
Declare @USAquery As Varchar(4000)
Declare @NonUSAquery As Varchar(4000)
DECLARE @As_User_PK Varchar(50)
DECLARE @TopRows Varchar(50)
DECLARE @NONUSQueryColumns Varchar(1000)
DECLARE @USQueryColumns Varchar(1000)
DECLARE @QueryColumnsTemp Varchar(1000)
DECLARE @errordesc varchar(max)
set @Selectionquery = ''
set @USAquery = ''
set @NonUSAquery = ''
Set @NONUSQueryColumns = ''
Set @USQueryColumns = ''
Set @QueryColumnsTemp = ''
Select @TopRows = Parameter_NUMBER_1
from cl_parameters
where cl_parameter_code='CLIENTSEARCH'
select @As_User_PK = AS_User_PK
from as_users
where AS_User_ID = @UserID
Set @USQueryColumns = '
SELECT PM.POLICY_NO,
PM.POLICY_STATUS_CODE,
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
--ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)) as last_org_name ,
Replace(ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)), ''&'', ''-'') as LASTORGNAME ,
Replace(CL.FULL_LEGAL_NAME, ''&'', ''-'') as FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY + '+''''+' '+''''+' + ISNULL(CLSTATE.STATE_NAME,CA.STATE_CODE),
CONVERT(VARCHAR(20), TERM.Term_Start_Date,101)+ '+''''+' - '+''''+' +CONVERT(VARCHAR(20),TERM.Term_End_Date,101),
Replace(CLAGENT.LAST_ORG_NAME, ''&'', ''-'') as LAST_ORG_NAME,
(Select SCREEN_NAME from CL_CLIENT where CL_CLIENT_PK=PM.ISSUECO_CLIENT_FK),
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK'
Set @USAquery = '
FROM dbo.PO_POLICY_MASTER PM
INNER JOIN CL_CLIENT CL
ON PM.OWNER_CLIENT_FK = CL.CL_CLIENT_PK'
Set @NONUSQueryColumns = '
SELECT PM.POLICY_NO,
PM.POLICY_STATUS_CODE,
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
--ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)) as last_org_name ,
Replace(ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)), ''&'', ''-'') as LASTORGNAME ,
Replace(CL.FULL_LEGAL_NAME, ''&'', ''-'') as FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY + '+''''+' '+''''+' + ISNULL(CA.STATE_CODE,'+''''+''+''''+'),
CONVERT(VARCHAR(20), TERM.Term_Start_Date,101)+ '+''''+' - '+''''+' +CONVERT(VARCHAR(20),TERM.Term_End_Date,101),
Replace(CLAGENT.LAST_ORG_NAME, ''&'', ''-'') as LAST_ORG_NAME,
(Select SCREEN_NAME from CL_CLIENT where CL_CLIENT_PK=PM.ISSUECO_CLIENT_FK),
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK'
Set @NonUSAquery = '
FROM dbo.PO_POLICY_MASTER PM
INNER JOIN CL_CLIENT CL
ON PM.OWNER_CLIENT_FK = CL.CL_CLIENT_PK'
IF ISNULL(@Lastname,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK'
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.LAST_ORG_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Lastname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.LAST_ORG_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Lastname + '%'+ ''''+')'
END
IF ISNULL(@Firstname,'') <> ''
BEGIN
IF ISNULL(@Lastname,'') = ''
BEGIN
SET @USAquery = @USAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK '
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Firstname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK '
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Firstname + '%'+ ''''+')'
END
ELSE
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Firstname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Firstname + '%'+ ''''+')'
END
END
/* Commented by JB to address the issue that the default adress is billing address hence the policy is not getting diaplayed
SET @USAquery = @USAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK and CA.Address_Type_Code = ''MAILING'' AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'Y'+''''+'' */
SET @USAquery = @USAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'Y'+''''+''
SET @USAquery = @USAquery + ' INNER JOIN CL_Role_Client crc ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = ''POLICY'' AND crc.Role_Address_FK = ca.CL_Address_PK '
/* Commented by JB to address the issue that the default adress is billing address hence the policy is not getting diaplayed
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK and CA.Address_Type_Code = ''MAILING'' AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'N'+''''+'' */ SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'N'+''''+''
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Role_Client crc ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = ''POLICY'' AND crc.Role_Address_FK = ca.CL_Address_PK '
IF ISNULL(@City,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CA.TOWN_CITY) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @City + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.TOWN_CITY) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @City + '%'+ ''''+')'
END
SET @USAquery = @USAquery + ' INNER JOIN PO_RISK_MASTER RISK ON RISK.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN PO_RISK_MASTER RISK ON RISK.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK'
IF ISNULL(@Address1,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CA.ADDRESS_LINE1) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ '%' + @Address1 + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.ADDRESS_LINE1) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ '%' + @Address1 + '%'+ ''''+')'
END
IF ISNULL(@HullID,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(RISK.RISK_EXTERNAL_ID) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ '%' + @HullID + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(RISK.RISK_EXTERNAL_ID) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ '%' + @HullID + '%'+ ''''+')'
END
SET @USAquery = @USAquery + ' INNER JOIN CL_COUNTRY_STATE CLSTATE ON CA.Country_Code = CLSTATE.CL_Country_Code AND CLSTATE.STATE_CODE = CA.STATE_CODE'
IF ISNULL(@State,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CLSTATE.STATE_NAME) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @State + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.STATE_CODE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @State + '%'+ ''''+')'
END
SET @USAquery = @USAquery + '
INNER JOIN PO_TERM_MASTER TERM
ON TERM.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
AND TERM.PO_TERM_MASTER_PK = (SELECT max(po_term_master_pk)
FROM PO_TERM_MASTER
WHERE PO_TERM_MASTER.PO_POLICY_MASTER_FK = PM.po_policy_master_PK)
LEFT OUTER JOIN PA_ACCOUNT_MASTER ACCT
ON ACCT.pa_account_master_pk = PM.PO_AGENT_ACCOUNT_FK
LEFT OUTER JOIN CL_CLIENT CLAGENT
ON CLAGENT.cl_client_pk = ACCT.owner_client_fk
INNER JOIN PR_PRODUCT PRODUCT
ON PRODUCT.PR_PRODUCT_PK = PM.PR_PRODUCT_FK
WHERE 1=1 and PRODUCT.PR_Product_Code <> ''BBRENTAL'' '
SET @NonUSAquery = @NonUSAquery + '
INNER JOIN PO_TERM_MASTER TERM
ON TERM.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
AND TERM.PO_TERM_MASTER_PK = (SELECT max(po_term_master_pk)
FROM PO_TERM_MASTER
WHERE PO_TERM_MASTER.PO_POLICY_MASTER_FK = PM.po_policy_master_PK)
LEFT OUTER JOIN PA_ACCOUNT_MASTER ACCT
ON ACCT.pa_account_master_pk = PM.PO_AGENT_ACCOUNT_FK
LEFT OUTER JOIN CL_CLIENT CLAGENT
ON CLAGENT.cl_client_pk = ACCT.owner_client_fk
INNER JOIN PR_PRODUCT PRODUCT
ON PRODUCT.PR_PRODUCT_PK = PM.PR_PRODUCT_FK
WHERE 1=1 and PRODUCT.PR_Product_Code <> ''BBRENTAL'' '
IF ISNULL(@Status,'') <> ''
BEGIN
IF ISNULL(@Status,'') <> 'ALL'
BEGIN
IF ISNULL(@Status,'') = 'Quote'
BEGIN
SET @USAquery = @USAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code not in (''BOUND'',''VOIDED'',''ISSUED'',''BINDEREXPIRED''))'
SET @NonUSAquery = @NonUSAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code not in (''BOUND'',''VOIDED'',''ISSUED'',''BINDEREXPIRED''))'
END
ELSE IF ISNULL(@Status,'') = 'Bound'
BEGIN
SET @USAquery = @USAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code in (''BOUND'',''BINDEREXPIRED''))'
SET @NonUSAquery = @NonUSAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code in (''BOUND'',''BINDEREXPIRED''))'
END
ELSE
BEGIN
SET @USAquery = @USAquery + ' AND PM.policy_status_code='
SET @USAquery = @USAquery + ''''+ @Status + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.policy_status_code='
SET @NonUSAquery = @NonUSAquery + ''''+ @Status + ''''+''
END
END
END
IF ISNULL(@Accountpk,'') <> ''
BEGIN
IF ISNULL(@Accountpk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.Po_Agent_Account_Fk in ('
SET @USAquery = @USAquery + ''''+ @Agentpk + ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND PM.Po_Agent_Account_Fk in ('
SET @NonUSAquery = @NonUSAquery + ''''+ @Agentpk + ''''+')'
END
END
IF ISNULL(@Issuecopk,'') <> ''
BEGIN
IF ISNULL(@Issuecopk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.ISSUECO_CLIENT_FK='
SET @USAquery = @USAquery + ''''+ @Issuecopk + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.ISSUECO_CLIENT_FK='
SET @NonUSAquery = @NonUSAquery + ''''+ @Issuecopk + ''''+''
END
END
IF ISNULL(@Productpk,'') <> ''
BEGIN
IF ISNULL(@Productpk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.pr_product_fk='
SET @USAquery = @USAquery + ''''+ @Productpk + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.pr_product_fk='
SET @NonUSAquery = @NonUSAquery + ''''+ @Productpk + ''''+''
END
END
IF ISNULL(@UserType,'') = 'AGENT'
BEGIN
SET @USAquery = @USAquery + '
AND PM.PO_AGENT_ACCOUNT_FK IN(SELECT PA_ACCOUNT_MASTER_PK FROM PA_ACCOUNT_MASTER
WHERE OWNER_CLIENT_FK IN (SELECT AGENT_CLIENT_FK FROM AS_USER_AGENT
WHERE AS_USER_FK = '+''''+convert(varchar,@As_User_PK) + ''''+''+ ' ))'
SET @NonUSAquery = @NonUSAquery + '
AND PM.PO_AGENT_ACCOUNT_FK IN(SELECT PA_ACCOUNT_MASTER_PK FROM PA_ACCOUNT_MASTER
WHERE OWNER_CLIENT_FK IN (SELECT AGENT_CLIENT_FK FROM AS_USER_AGENT
WHERE AS_USER_FK = '+''''+convert(varchar,@As_User_PK) + ''''+''+ ' ))'
END
-- Create table #tblcount (Nofofrows numeric(18,0))
-- SET @Selectionquery = 'Insert into #tblcount select count(PM.PO_POLICY_MASTER_PK) ' + @USAquery + ' UNION ALL ' + 'select count(PM.PO_POLICY_MASTER_PK) ' + @NonUSAquery
-- Exec(@Selectionquery) -- Set @errordesc = ''
-- select @errordesc = Error_Description from screen_error_message where Error_No=5339
-- If (select sum(Nofofrows) from #tblcount) > @TopRows -- Begin -- --Set @Selectionquery = 'Select ''NOTE'', '''', ''Too Many Rows Returned'', '''', '''', '''', '''', '''', '''', ''0''' -- Set @Selectionquery = 'Select ''NOTE'', ''>' + convert(varchar(3), @TopRows) + ' rows'', ''' + @errordesc +''', '''', '''', '''', '''', '''', '''', ''0''' -- Exec(@Selectionquery) -- End -- else -- Begin
Create table #tblpolicydata (
POLICY_NO varchar(25),
POLICY_STATUS_CODE varchar(25),
LAST_ORG_NAME varchar(250),
FULL_LEGAL_NAME varchar(250),
ADDRESS_LINE1 varchar(250),
TOWN_CITY varchar(250),
TERM_DATES varchar(25),
AGENTLAST_ORG_NAME varchar(250),
ISSUECO varchar(250),
PRODUCT varchar(50),
PO_POLICY_MASTER_PK numeric(18,0))
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
/* SET @Selectionquery = 'Insert into #tblpolicydata ' + @USQueryColumns + ' ' + @USAquery +
' UNION ALL ' + @NONUSQueryColumns + ' ' + @NonUSAquery + ' ORDER BY CL.LAST_ORG_NAME' */ SET @Selectionquery = 'Insert into #tblpolicydata ' + @USQueryColumns + ' ' + @USAquery +
' UNION ALL ' + @NONUSQueryColumns + ' ' + @NonUSAquery + ''
Exec(@Selectionquery)
update #tblpolicydata
Set POLICY_STATUS_CODE = (Select pot.transaction_cycle_code
From dbo.po_transaction pot
where pot.po_policy_master_fk = #tblpolicydata.PO_POLICY_MASTER_PK
and pot.pr_tran_type_code = 'NEWBUSINESS')
where POLICY_STATUS_CODE = 'Prospect'
Select POLICY_NO,
upper(POLICY_STATUS_CODE) POLICY_STATUS_CODE,
LAST_ORG_NAME,
FULL_LEGAL_NAME,
ADDRESS_LINE1,
TOWN_CITY,
TERM_DATES,
AGENTLAST_ORG_NAME,
ISSUECO,
PRODUCT,
PO_POLICY_MASTER_PK
From #tblpolicydata
GROUP BY POLICY_NO,
upper(POLICY_STATUS_CODE),
LAST_ORG_NAME,
FULL_LEGAL_NAME,
ADDRESS_LINE1,
TOWN_CITY,
TERM_DATES,
AGENTLAST_ORG_NAME,
ISSUECO,
PRODUCT,
PO_POLICY_MASTER_PK
order by POLICY_NO
Drop table #tblpolicydata
-- End -- Drop table #tblcount --Exec INSCS_ClientSearch '','','','','','','India','','','','','','' Set NOCOUNT OFF End
在获取主查询中所需的字段时,确实不需要临时处理。只需在主查询中将该值重新分配给策略\状态\代码
同样,不需要获取MAXpo_term_master_pk的子查询,您已经有了详细的数据,并且已经在对返回的结果进行分组,为什么子查询在内部联接中
您的状态检查将大大降低查询速度。您已经点击了主查询中的所有字段,然后按照除状态标志之外的所有字段进行分组。只需使用计算字段并在外部查询中求和即可
下面发布的代码不会编译,也不会提供正确的数据,但是,您可能希望使用它来开始改进上面发布的代码的性能
WHERE
(@FilterField1 IS NULL OR(MyTable.Field1 = @FilterField1))
看看执行计划,看看它在做什么,而不仅仅是在这里发布大量的SQL,并希望其他人也这样做you@CSK将存储过程分解为更小的语句块,并在实际执行计划打开的情况下运行查询。尝试在最常用的列上添加适当的索引,并检查是否正在进行任何表扫描。在这里执行需要更多的时间。我想减少执行时间。请提供一些想法以减少时间您甚至没有发布代码,我们如何为您提供帮助?堆栈溢出用户不是透视者。
SELECT
*
FROM
(
SELECT
*,
BoundFlag = CASE WHEN MAX(BoundFlag) = 1 THEN 1 ELSE 0 END,
VoidedFlag = CASE WHEN MAX(VoidedFlag) = 1 THEN 1 ELSE 0 END,
IssuedFlag = CASE WHEN MAX(IssuedFlag) = 1 THEN 1 ELSE 0 END,
BinderExpiredFlag= CASE WHEN MAX(BinderExpiredFlag) =1 THEN 1 ELSE 0 END,
MaxPoTermMasterPK= max(po_term_master_pk)
FROM
(
SELECT
BoundFlag = CASE WHEN pot.transaction_cycle_code ='BOUND' THEN 1 ELSE 0 END,
VoidedFlag = CASE WHEN pot.transaction_cycle_code ='VOIDED' THEN 1 ELSE 0 END,
IssuedFlag = CASE WHEN pot.transaction_cycle_code ='ISSUED' THEN 1 ELSE 0 END,
BinderExpiredFlag= CASE WHEN pot.transaction_cycle_code ='BINDEREXPIRED' THEN 1 ELSE 0 END,
HasProspectFlag = CASE WHEN POLICY_STATUS_CODE = 'Prospect' THEN 1 ELSE 0 END,
POLICY_STATUS_CODE = CASE WHEN POLICY_STATUS_CODE = 'NEWBUSINESS' THEN 'PROSPECT' ELSE POLICY_STATUS_CODE,
PM.POLICY_NO,
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
--ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)) as last_org_name ,
Replace(ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)), ''&'', ''-'') as LASTORGNAME ,
Replace(CL.FULL_LEGAL_NAME, ''&'', ''-'') as FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY + '+''''+' '+''''+' + ISNULL(CLSTATE.STATE_NAME,CA.STATE_CODE),
CONVERT(VARCHAR(20), TERM.Term_Start_Date,101)+ '+''''+' - '+''''+' +CONVERT(VARCHAR(20),TERM.Term_End_Date,101),
Replace(CLAGENT.LAST_ORG_NAME, ''&'', ''-'') as LAST_ORG_NAME,
(Select SCREEN_NAME from CL_CLIENT where CL_CLIENT_PK=PM.ISSUECO_CLIENT_FK),
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK
FROM
dbo.PO_POLICY_MASTER PM
INNER JOIN dbo.PO_POLICY_MASTER PM ON PM.<PrimaryKey>=FlagDetail.<PrimaryKey>
INNER JOIN CL_CLIENT CL ON PM.OWNER_CLIENT_FK = CL.CL_CLIENT_PK
LEFT OUTER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK
LEFT OUTER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK IS_USA='Y' --YOU DNOT NEED IS NULL ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'Y'+'''
LEFT OUTER JOIN CL_Role_Client crc_us ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = 'POLICY' AND crc.Role_Address_FK = ca.CL_Address_PK
--YOU DONT NEED TO JOIN AGAIN FOR NON US - YOU ARE USING THE SAME CONDITION LEFT OUTER JOIN CL_Role_Client crc_us ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = 'POLICY' AND crc.Role_Address_FK = ca.CL_Address_PK
INNER JOIN PO_RISK_MASTER RISK ON RISK.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
LEFT OUTER JOIN CL_COUNTRY_STATE CLSTATE ON CA.Country_Code = CLSTATE.CL_Country_Code AND CLSTATE.STATE_CODE = CA.STATE_CODE
/* SEE COMMENTS - TRY TO AVOID A SUBQUERY IN YOUR JOINS !
INNER JOIN PO_TERM_MASTER TERM ON TERM.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
--You could replace this subquery below with a master subquery reducing burden on the join
AND TERM.PO_TERM_MASTER_PK =
(
SELECT max(po_term_master_pk)
FROM PO_TERM_MASTER
WHERE PO_TERM_MASTER.PO_POLICY_MASTER_FK = PM.po_policy_master_PK
)
*/
LEFT OUTER JOIN PA_ACCOUNT_MASTER ACCT ON ACCT.pa_account_master_pk = PM.PO_AGENT_ACCOUNT_FK
LEFT OUTER JOIN CL_CLIENT CLAGENT ON CLAGENT.cl_client_pk = ACCT.owner_client_fk
INNER JOIN PR_PRODUCT PRODUCT ON PRODUCT.PR_PRODUCT_PK = PM.PR_PRODUCT_FK
LEFT OUTER JOIN dbo.po_transaction pot ON pot.po_policy_master_fk = pm.po_policy_master_pk and pot.pr_tran_type_code = 'NEWBUSINESS'
WHERE
(@LastName IS NULL OR (CL_CLIENT_NAME.LAST_ORG_NAME_UCASE LIKE @Lastname + '%')) --Check your collation - I bet you dont need UCASE
AND
(@FisrtName IS NULL OR (CL_CLIENT_NAME.FIRST_ORG_NAME_UCASE LIKE @Fisrtname + '%'))--Check your collation - I bet you dont need UCASE
AND
(@City IS NULL OR (CA.TOWN_CITY LIKE @City + '%') -- You probally dont need UPPERCASE HERE Check your collation
AND
(@Address1 IS NULL OR(CA.ADDRESS_LINE1 LIKE '%' +@Address1 + '%'))
AND
(@HullID IS NULL OR(RISK.RISK_EXTERNAL_ID LIKE '%' + @HullID + '%'))
AND
(@StateID IS NULL OR(CLSTATE.STATE_NAME LIKE @State + '%'))
AND
(1=1 and PRODUCT.PR_Product_Code <> 'BBRENTAL') --WHats with the 1=1?
AND
(@UserType<>'AGENT' OR(PM.PO_AGENT_ACCOUNT_FK IN(SELECT PA_ACCOUNT_MASTER_PK FROM PA_ACCOUNT_MASTER WHERE OWNER_CLIENT_FK IN (SELECT AGENT_CLIENT_FK FROM AS_USER_AGENT WHERE AS_USER_FK = convert(varchar,@As_User_PK) )))
AND
((@Accountpk IS NULL OR @Accountpk='ALL') OR(PM.Po_Agent_Account_Fk =@Agentpk))
AND
((@Issuecopk IS NULL OR @Issuecopk='ALL') OR(PM.ISSUECO_CLIENT_FK =@Issuecopk))
AND
((@Productpk IS NULL OR @Productpk='ALL') OR(PM.pr_product_fk =@Issuecopk))
)AS DETAIL
GROUP BY
PM.POLICY_NO,
PM.POLICY_STATUS_CODE,
LASTORGNAME ,
FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY,
CLSTATE.STATE_NAME,
CA.STATE_CODE,
TERM.Term_Start_Date,
TERM.Term_End_Date
CLAGENT.LAST_ORG_NAME,
LAST_ORG_NAME,
PM.ISSUECO_CLIENT_FK,
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK,
pr_tran_type_code
)AS SUMMARY
WHERE
(PO_TERM_MASTER_PK = MaxPoTermMasterPK)
AND
(
(@Status IS NULL )
OR
(
(@Status ='Quote' AND (IsBound + IsVoided + IsIssued + IsBinderExipired = 0))
OR
(@Status ='Bound' AND ( IsBound + IsBinderExipired > 0))
)
)
ORDER BY
POLICY_NO