ODBC guide

Read custom fields with nested structures (SLA fields)


Shows how to query custom fields that contain nested document structures (not arrays), such as SLA fields. Use META='@OverrideMode:1' to merge static and dynamic metadata so you can select both standard columns and nested custom field properties. Replace the example custom field IDs (e.g. customfield_10084) with your own; run SELECT * FROM Fields or check Jira project settings to find field IDs.

-- NOTE: Replace customfield_10084, customfield_10085, customfield_10086 with your own custom field IDs.
-- You can run [SELECT * FROM Fields] in preview tab to get the field IDs. 
-- OR you can find field IDs in Jira: Project Settings > Issue types > Edit field > field ID in URL or API.

SELECT 
-- static fields

  id
, key
, summary
, statusname

-- dynamic fields

-- SLA: Time to Resolution (replace customfield_10084 with your SLA field ID) 

,[fields.customfield_10084.id] as c10084_id
,[fields.customfield_10084.name] as c10084_name
,[fields.customfield_10084.ongoingCycle.startTime.friendly] as c10084_startTime_friendly
,[fields.customfield_10084.ongoingCycle.startTime.jira] as c10084_startTime_jira
,[fields.customfield_10084.ongoingCycle.breachTime.friendly] as c10084_breachTime_friendly
,[fields.customfield_10084.ongoingCycle.breachTime.jira] as c10084_breachTime_jira
,[fields.customfield_10084.ongoingCycle.elapsedTime.friendly] as c10084_elapsedTime_friendly
,[fields.customfield_10084.ongoingCycle.remainingTime.friendly] as c10084_remainingTime_friendly
,[fields.customfield_10084.ongoingCycle.goalDuration.friendly] as c10084_goalDuration_friendly
,[fields.customfield_10084.ongoingCycle.breached] as c10084_breached
,[fields.customfield_10084.ongoingCycle.paused] as c10084_paused

-- SLA: Time to First Response (replace customfield_10085 with your SLA field ID)

,[fields.customfield_10085.id] as c10085_id
,[fields.customfield_10085.name] as c10085_name
,[fields.customfield_10085.ongoingCycle.startTime.friendly] as c10085_startTime_friendly
,[fields.customfield_10085.ongoingCycle.startTime.jira] as c10085_startTime_jira
,[fields.customfield_10085.ongoingCycle.breachTime.friendly] as c10085_breachTime_friendly
,[fields.customfield_10085.ongoingCycle.breachTime.jira] as c10085_breachTime_jira
,[fields.customfield_10085.ongoingCycle.elapsedTime.friendly] as c10085_elapsedTime_friendly
,[fields.customfield_10085.ongoingCycle.remainingTime.friendly] as c10085_remainingTime_friendly
,[fields.customfield_10085.ongoingCycle.goalDuration.friendly] as c10085_goalDuration_friendly
,[fields.customfield_10085.ongoingCycle.breached] as c10085_breached
,[fields.customfield_10085.ongoingCycle.paused] as c10085_paused

-- SLA: Time to Close After Resolution (replace customfield_10086 with your SLA field ID)

,[fields.customfield_10086.id] as c10086_id
,[fields.customfield_10086.name] as c10086_name

-- Other nested custom fields (replace IDs as needed) 
,[fields.customfield_10024.id] as c10024_id
,[fields.customfield_10024.name] as c10024_name
,[fields.customfield_10075.languageCode] as c10075_languageCode
,[fields.customfield_10075.displayName] as c10075_displayName

FROM Issues
WITH(
	  JQL='project IN(SUP)'
	  -- @OverrideMode:1 merges metadata so you can use static + dynamic fields together
	  ,META='@OverrideMode:1
	  ;fields.customfield_10084.id : string(10)
	  ;fields.customfield_10084.name : string(180)
	  ;fields.customfield_10084.ongoingCycle.startTime.friendly : string(130)
	  ;fields.customfield_10084.ongoingCycle.startTime.jira : DateTime
	  ;fields.customfield_10084.ongoingCycle.breachTime.friendly : string(130)
	  ;fields.customfield_10084.ongoingCycle.breachTime.jira : DateTime
	  ;fields.customfield_10084.ongoingCycle.elapsedTime.friendly : string(30)
	  ;fields.customfield_10084.ongoingCycle.remainingTime.friendly : string(70)
	  ;fields.customfield_10084.ongoingCycle.goalDuration.friendly : string(30)
	  ;fields.customfield_10084.ongoingCycle.breached : Boolean
	  ;fields.customfield_10084.ongoingCycle.paused : Boolean
	  ;fields.customfield_10085.id : string(10)
	  ;fields.customfield_10085.name : string(220)
	  ;fields.customfield_10085.ongoingCycle.startTime.friendly : string(130)
	  ;fields.customfield_10085.ongoingCycle.startTime.jira : DateTime
	  ;fields.customfield_10085.ongoingCycle.breachTime.friendly : string(130)
	  ;fields.customfield_10085.ongoingCycle.breachTime.jira : DateTime
	  ;fields.customfield_10085.ongoingCycle.elapsedTime.friendly : string(30)
	  ;fields.customfield_10085.ongoingCycle.remainingTime.friendly : string(70)
	  ;fields.customfield_10085.ongoingCycle.goalDuration.friendly : string(30)
	  ;fields.customfield_10085.ongoingCycle.breached : Boolean
	  ;fields.customfield_10085.ongoingCycle.paused : Boolean
	  ;fields.customfield_10086.id : string(10)
	  ;fields.customfield_10086.name : string(300)
	  ;fields.customfield_10024.id : string(40)
	  ;fields.customfield_10024.name : string(80)
	  ;fields.customfield_10075.languageCode : string(20)
	  ;fields.customfield_10075.displayName : string(70)
	  ;--add more nested custom field properties here as needed--
	  '
)