Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 607
  • Last Modified:

if statement in select query

Hi,

Is it possible to include an IF statement into a select query??

I am trying to include "IF (CONVERT(VARCHAR(10),GETDATE(),108) > '09:00:00')" into a select query but am receving several errors when I do.

Thanks
SELECT  INCI.INCIDENT_CODE,
		INCI.INCIDENT_TITLE,
		INCI.INCIDENT_MESSAGE,
		U.USER_NAME  AS OWNER,
		C.FIRST_NAME + ' ' + C.LAST_NAME AS CONTACT_REQUESTER,
		L1.LIST_VALUE AS INCIDENT_STATUS,
		L2.LIST_VALUE AS INCIDEND_PRIORITY,
		INCI.CREATE_DATETIME,
 
--IF (CONVERT(VARCHAR(10),GETDATE(),108) > '09:00:00')
	
		
		--CASE STATEMENT TO IDENTIFY SLA FIX DATETIME COLOUR
		CASE 	
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) > (SLA.SLA_TIME / 2) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000361')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) <= (SLA.SLA_TIME / 2) AND DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) > (SLA.SLA_TIME / 3) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000362')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) <= (SLA.SLA_TIME / 3) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000360')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) < 0 THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000359')
		ELSE (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000358')
		END AS [SLA Fix KPI],
 
		--CASE STATEMENT TO IDENTIFY SLA RESP DATETIME COLOUR
		CASE 	
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS3.FIELD_VALUE, 103) ) > (SLA2.SLA_TIME / 2) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000361')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS3.FIELD_VALUE, 103) ) <= (SLA2.SLA_TIME / 2) AND DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS.FIELD_VALUE, 103) ) > (SLA.SLA_TIME / 3) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE= 'LIST00000000362')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS3.FIELD_VALUE, 103) ) <= (SLA2.SLA_TIME / 3) THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = '~/Images/redSLA.jpg')
		WHEN DATEDIFF(MI, CONVERT(DATETIME, GETDATE(), 103), CONVERT(DATETIME, INCIS3.FIELD_VALUE, 103) ) < 0 THEN (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000359')
		ELSE (SELECT LIST_VALUE FROM TBL_LIST WHERE LIST_CODE = 'LIST00000000358')
		END AS [SLA Resp KPI]
 
 
FROM TBL_INCIDENT INCI
LEFT JOIN TBL_USER U ON U.USER_CODE = INCI.OWNER_CODE
LEFT JOIN TBL_CONTACT C ON C.CONTACT_CODE = INCI.CONTACT_REQUESTER
LEFT JOIN TBL_LIST L1 ON L1.LIST_CODE = INCI.INCIDENT_STATUS
LEFT JOIN TBL_LIST L2 ON L2.LIST_CODE = INCI.INCIDENT_PRIORITY
 
--NEW CODE TO ACCOMODATE THE SLA IMAGE--
LEFT JOIN TBL_INCIDENT_IS INCIS ON INCI.INCIDENT_CODE = INCIS.INCIDENT_CODE AND INCIS.OBJECT_PROPERTY_CODE = 'OBJP00000000020' --SLA End DateTime
LEFT JOIN TBL_INCIDENT_IS INCIS2 ON INCI.INCIDENT_CODE = INCIS2.INCIDENT_CODE AND INCIS2.OBJECT_PROPERTY_CODE = 'OBJP00000000016' --SLA FIX CAT
LEFT JOIN TBL_INCIDENT_IS INCIS3 ON INCI.INCIDENT_CODE = INCIS3.INCIDENT_CODE AND INCIS3.OBJECT_PROPERTY_CODE = 'OBJP00000000034' --SLA RESP End DateTime
LEFT JOIN TBL_INCIDENT_IS INCIS4 ON INCI.INCIDENT_CODE = INCIS4.INCIDENT_CODE AND INCIS4.OBJECT_PROPERTY_CODE = 'OBJP00000000035' --SLA RESP CAT
 
LEFT JOIN TBL_SLA SLA ON SLA.SLA_CODE = INCIS2.FIELD_VALUE  --SLA FIX CAT MINS
LEFT JOIN TBL_SLA SLA2 ON SLA2.SLA_CODE = INCIS4.FIELD_VALUE  --SLA resp CAT MINS
--END OF NEW CODE--
 
WHERE INCI.TEAM_CODE = 'TEAM00000000010'

Open in new window

0
dwhitfield_CPWN
Asked:
dwhitfield_CPWN
1 Solution
 
momi_sabagCommented:
what do you mean if?
what are you trying to achieve?
it is not possible to determine using an if the number of columns that will be selected, since each row must have the exact same columns

you can use a case statement in order to decide if you wish to return a value or just a null for a certain column
0
 
luaniCommented:
you cannot place the IF inside the query but you can do :
DECLARE @VAR VARCHAR(10)

SET @Var=CONVERT(VARCHAR(10),GETDATE(),108)

IF @Var>''09:00:00'
SELECT ..........
ELSE
SELECT .........


0
 
St3veMaxCommented:
WHat are you trying to achieve ?

Looking at your example it would be something for monitoring SLA's; I do something similar with our Support Centre; but I use in the where clause:

DATEPART(HH, YourField) BETWEEN '8' AND '18'
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
dwhitfield_CPWNAuthor Commented:
Ok, basically I only want to use the two case statements if the current time is greater than 09:00:00.

If is before 09:00:00 then I dont want the two case statements to run

Hope this helps
0
 
St3veMaxCommented:
The example above will help as you're saying your criteria is between set hours.

HTH
0
 
dwhitfield_CPWNAuthor Commented:
I still want the query to run even if its past say 17:00:00.

So ive used the variable technique and done and if staement around that.

Thanks for all your help.
0
 
vinurajrCommented:
This IF too u can avoid... by bringing the condition in where clause
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now