Skip to content

Get Person's Grade in SQL

Rock stores a person's graduation year, not their grade. It turns out that is is actually quite difficult to convert that value into a grade string since you have to take into account the transition date set in Rock.

Query

/* Setup Info */
DECLARE @GradeDefinedTypeId int = ( SELECT [Id] FROM [DefinedType] WHERE [Guid] = '24E5A79F-1E62-467A-AD5D-0D10A2328B4D' );
DECLARE @GradeTransitionDateAttributeId int = ( SELECT [Id] FROM [Attribute] WHERE [Guid] = '265734a6-c888-45b4-a7a5-9a26478306b8' );
DECLARE @ThisYear nvarchar(4) = ( SELECT FORMAT( GETDATE(), 'yyyy' ) );
DECLARE @GradeTransitionDate datetime = ( SELECT CAST( [Value] + '/' + @ThisYear AS datetime ) FROM [AttributeValue] WHERE [AttributeId] = @GradeTransitionDateAttributeId );

/* Person Info */
DECLARE @PersonId int = 50532;
DECLARE @GradYear int = ( SELECT [GraduationYear] FROM [Person] WHERE [Id] = @PersonId );
DECLARE @GradeOffset int = ( SELECT dbo.[ufnCrm_GetGradeOffset]( @GradYear, @GradeTransitionDate ) );

SELECT [Description]
FROM [DefinedValue]
WHERE
    [DefinedTypeId] = @GradeDefinedTypeId
    AND [Value] = @GradeOffset
;