Guest User

Untitled

a guest
Jun 22nd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 15.35 KB | None | 0 0
  1. USE [SDS_DevSchoolDistrict]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[AssessmentTestGroupScoresByStudentGroupAsXml]    Script Date: 02/10/2012 17:47:11 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. -- =============================================
  9. -- Author:      School Data Solutions
  10. -- Create date: <Create Date, ,>
  11. -- Description: <Description, ,>
  12. -- Copyright 2011-2012 School Data Solutions, All Rights Reserved
  13. -- ============================================
  14. ALTER FUNCTION [dbo].[AssessmentTestGroupScoresByStudentGroupAsXml]
  15. (   ---------------------------------------------
  16.     @StudentGroupId         int,
  17.     @AssessmentTestGroupId  int,
  18.     ---------------------------------------------
  19.     @DataViewMode           varchar(200) = 'Standard',
  20.     @EncryptIds             bit = 0,
  21.     @ApplicationUserId      int = NULL,
  22.     @ApplicationUserActivePersonRoleId int = 1
  23. )   ---------------------------------------------
  24. RETURNS Xml
  25. AS
  26. BEGIN   /*---------------------------------------------
  27.         --SELECT    SG.StudentGroupName,
  28.         --      SG.StudentGroupId,
  29.         --      ATG.AssessmentTestGroup,
  30.         --      ATG.AssessmentTestGroupId,
  31.         --      C.StudentCount
  32.         --FROM  (
  33.         --      SELECT  COUNT(SATS.StudentAssessmentTestScoreId) AS StudentCount,
  34.         --              S_G.StudentGroupId,
  35.         --              AT_G.AssessmentTestGroupId
  36.         --      FROM    StudentAssessmentTestScores SATS
  37.         --      JOIN    AssessmentTests_Groups  AT_G
  38.         --        ON    SATS.AssessmentTestId = AT_G.AssessmentTestId
  39.         --      JOIN    Students_Groups S_G
  40.         --        ON    SATS.StudentId = S_G.StudentId
  41.         --      GROUP BY S_G.StudentGroupId,
  42.         --              AT_G.AssessmentTestGroupId
  43.         --      HAVING  COUNT(SATS.StudentAssessmentTestScoreId) > 500 
  44.         --      ) C
  45.         --JOIN  AssessmentTestGroups ATG
  46.         --  ON  C.AssessmentTestGroupId = ATG.AssessmentTestGroupId
  47.         --JOIN  StudentGroups SG
  48.         --  ON  C.StudentGroupId = SG.StudentGroupId
  49.         ---------------------------------------------
  50.         DECLARE @StudentGroupId int         SET @StudentGroupId = 51315
  51.         DECLARE @AssessmentTestGroupId int  SET @AssessmentTestGroupId = 14
  52.         DECLARE @DataViewMode varchar(200)  SET @DataViewMode = 'Standard'
  53.         DECLARE @EncryptIds bit             SET @EncryptIds = 0
  54.         DECLARE @ApplicationUserId  int     SET @ApplicationUserId = 3
  55.         DECLARE @ApplicationUserActivePersonRoleId int
  56.         --SELECT dbo.AssessmentTestGroupScoresByStudentGroupAsXml(51392, 53, DEFAULT, 0, 1, 1)
  57.         ---------------------------------------------*/
  58.        
  59.        
  60.        
  61.        
  62.  
  63.        
  64.         ---------------------------------------------
  65.         -- Declare the return variable here
  66.         -- Prepare for performance metrics
  67.         ---------------------------------------------
  68.         DECLARE @Xml XML = '<Xml/>'
  69.         DECLARE @StartTime time = CAST(GETDATE() as time)
  70.         ---------------------------------------------
  71.        
  72.  
  73.         ---------------------------------------------
  74.         -- Assessment-Test-Ids
  75.         ---------------------------------------------
  76.         DECLARE @AssessmentTestIds TABLE (
  77.                 AssessmentTestId                int,
  78.                 AssessmentTestOrdinalByGroup    int
  79.         )
  80.         ---------------------------------------------
  81.         INSERT  @AssessmentTestIds
  82.         SELECT  AssessmentTestId,
  83.                 ROW_NUMBER() OVER(
  84.                 ORDER BY AT_G.AssessmentTestOrdinalByGroup,
  85.                          AT_G.AssessmentTestId)
  86.         FROM    AssessmentTests_Groups AT_G
  87.         WHERE   AT_G.AssessmentTestGroupId = @AssessmentTestGroupId
  88.         ---------------------------------------------
  89.         --SELECT * FROM @AssessmentTestIds
  90.         ---------------------------------------------
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.         ---------------------------------------------
  100.         -- Student Maximum Assessment Test Scores
  101.         ---------------------------------------------
  102.         DECLARE @StudentMaximumAssessmentTestScores TABLE (
  103.                 StudentId                           int,
  104.                 AssessmentTestId                    int,
  105.                 StudentAssessmentTestScoreId        int,
  106.                 StudentAssessmentTestScore          money,
  107.                 AssessmentTestPerformanceLevelId    int,
  108.                 StudentAssessmentTestScoreRank      int,
  109.                 AssessmentTestOrdinalByGroup        int
  110.         )
  111.         INSERT  @StudentMaximumAssessmentTestScores(
  112.                 StudentId,
  113.                 AssessmentTestId,
  114.                 StudentAssessmentTestScoreId,
  115.                 StudentAssessmentTestScore,
  116.                 AssessmentTestPerformanceLevelId,
  117.                 StudentAssessmentTestScoreRank,
  118.                 AssessmentTestOrdinalByGroup       
  119.         )
  120.         SELECT  SATS.StudentId,
  121.                 SATS.AssessmentTestId,
  122.                 SATS.StudentAssessmentTestScoreId,
  123.                 SATS.StudentAssessmentTestScore,
  124.                 SATS.AssessmentTestPerformanceLevelId,
  125.                 ROW_NUMBER() OVER(
  126.                         PARTITION BY SATS.AssessmentTestId, SATS.StudentId
  127.                         ORDER BY SATS.StudentAssessmentTestScore DESC,
  128.                                  SATS.StudentAssessmentTestScoreId DESC) AS ScoreRank,
  129.                 ATI.AssessmentTestOrdinalByGroup                 
  130.         FROM    StudentAssessmentTestScores SATS
  131.         JOIN    @AssessmentTestIds ATI
  132.           ON    SATS.AssessmentTestId = ATI.AssessmentTestId
  133.         JOIN    Students_Groups S_G
  134.           ON    SATS.StudentId = S_G.StudentId     
  135.          AND    S_G.StudentGroupId = @StudentGroupId    
  136.         --WHERE SATS.StudentId IN (432, 27409, 482, 54930, 54931)
  137.         ---------------------------------------------
  138.         --SELECT * FROM @StudentMaximumAssessmentTestScores ORDER BY StudentId, AssessmentTestId
  139.         ---------------------------------------------
  140.  
  141.  
  142.  
  143.         ---------------------------------------------
  144.         -- Student Assessment Test Scores
  145.         ---------------------------------------------
  146.         DECLARE @StudentAssessmentTestScores TABLE (
  147.                 StudentId                           int,
  148.                 AssessmentTestId                    int,
  149.                 StudentAssessmentTestScore          money,
  150.                 AssessmentTestOrdinalByGroup        int,
  151.                 AssessmentTestPerformanceLevelId    int,
  152.                 AssessmentTestPerformanceLevel      varchar(100),
  153.                 AssessmentTestPerformanceLevelColor varchar(6)
  154.         )
  155.         ---------------------------------------------
  156.         INSERT  @StudentAssessmentTestScores (
  157.                 StudentId,
  158.                 AssessmentTestId,
  159.                 StudentAssessmentTestScore,
  160.                 AssessmentTestOrdinalByGroup,
  161.                 AssessmentTestPerformanceLevelId,
  162.                 AssessmentTestPerformanceLevel,
  163.                 AssessmentTestPerformanceLevelColor
  164.         )
  165.         SELECT  SATS.StudentId,
  166.                 SATS.AssessmentTestId,
  167.                 SATS.StudentAssessmentTestScore,
  168.                 ATI.AssessmentTestOrdinalByGroup,
  169.                 SATS.AssessmentTestPerformanceLevelId,
  170.                 ATPL.AssessmentTestPerformanceLevel,
  171.                 ATPL.AssessmentTestPerformanceLevelColor
  172.         FROM    @StudentMaximumAssessmentTestScores SATS
  173.         JOIN    @AssessmentTestIds ATI
  174.           ON    SATS.AssessmentTestId = ATI.AssessmentTestId
  175.          AND    SATS.StudentAssessmentTestScoreRank = 1
  176.         JOIN    AssessmentTestPerformanceLevels ATPL
  177.           ON    SATS.AssessmentTestPerformanceLevelId = ATPL.AssessmentTestPerformanceLevelId
  178.         --WHERE SATS.StudentId IN (432, 27409, 482)
  179.         ---------------------------------------------
  180.         --SELECT * FROM @StudentAssessmentTestScores ORDER BY StudentId, AssessmentTestId
  181.         ---------------------------------------------
  182.  
  183.  
  184.  
  185.  
  186.  
  187.         ---------------------------------------------
  188.         -- Re-populate Assessment test id, to only get tests with score
  189.         ---------------------------------------------
  190.         DELETE  @AssessmentTestIds
  191.         ---------------------------------------------
  192.         INSERT  @AssessmentTestIds
  193.         SELECT  AssessmentTestId,
  194.                 ROW_NUMBER() OVER(
  195.                 ORDER BY AT_G.AssessmentTestOrdinalByGroup,
  196.                          AT_G.AssessmentTestId)
  197.         FROM    AssessmentTests_Groups AT_G
  198.         WHERE   AT_G.AssessmentTestGroupId = @AssessmentTestGroupId
  199.           AND   EXISTS (
  200.                         SELECT  1
  201.                         FROM    @StudentAssessmentTestScores SATS
  202.                         WHERE   SATS.AssessmentTestId = AT_G.AssessmentTestId
  203.                 )
  204.         ---------------------------------------------
  205.         --SELECT * FROM @AssessmentTestIds
  206.         ---------------------------------------------
  207.  
  208.  
  209.  
  210.  
  211.         ---------------------------------------------
  212.         -- StudentIds
  213.         ---------------------------------------------
  214.         DECLARE @StudentIds TABLE (
  215.                 StudentId   int
  216.         )
  217.         ---------------------------------------------
  218.         INSERT  @StudentIds(StudentId)
  219.         SELECT  DISTINCT S.StudentId
  220.         FROM    @StudentAssessmentTestScores S
  221.         ---------------------------------------------
  222.         --SELECT * FROM @StudentIds
  223.         ---------------------------------------------
  224.  
  225.  
  226.  
  227.  
  228.  
  229.         ---------------------------------------------
  230.         -- Students
  231.         ---------------------------------------------
  232.         DECLARE @Students TABLE (
  233.                 StudentId   int,
  234.                 FirstName   varchar(100),
  235.                 LastName    varchar(100),
  236.                 DisplayName varchar(300),
  237.                 OrdinalText varchar(300)
  238.         )
  239.         ---------------------------------------------
  240.         INSERT  @Students(StudentId, FirstName, LastName, DisplayName, OrdinalText)
  241.         SELECT  P.PersonId,
  242.                 P.FirstName,
  243.                 P.LastName,
  244.                 P.FirstName + ' ' + P.LastName,
  245.                 P.LastName + ', ' + P.FirstName
  246.         FROM    @StudentIds S
  247.         JOIN    dbo.DataViewModePersons(NULL,@DataViewMode) P
  248.           ON    S.StudentId = P.PersonId
  249.         ---------------------------------------------
  250.         --SELECT * FROM @Students
  251.         ---------------------------------------------
  252.  
  253.  
  254.  
  255.  
  256.         ---------------------------------------------
  257.         -- Student CROSS JOIN Tests
  258.         ---------------------------------------------
  259.         DECLARE @StudentsAndTests TABLE (
  260.                 StudentId                       int,
  261.                 AssessmentTestId                int,
  262.                 AssessmentTestOrdinalByGroup    int
  263.         )
  264.         ---------------------------------------------
  265.         INSERT  @StudentsAndTests
  266.         SELECT  S.StudentId,
  267.                 T.AssessmentTestId,
  268.                 T.AssessmentTestOrdinalByGroup
  269.         FROM    @StudentIds S
  270.         CROSS
  271.         JOIN    @AssessmentTestIds T
  272.         ---------------------------------------------
  273.         --SELECT * FROM @StudentsAndTests ORDER BY StudentId, AssessmentTestOrdinalByGroup
  274.         ---------------------------------------------
  275.  
  276.  
  277.  
  278.  
  279.  
  280.         ---------------------------------------------
  281.         -- Student Assessment Test Scores with blanks for un-taken tests
  282.         ---------------------------------------------
  283.         DECLARE @StudentAssessmentTestScoresWithBlanks TABLE (
  284.                 StudentId                           int,
  285.                 AssessmentTestId                    int,
  286.                 AssessmentTestOrdinalByGroup        int,
  287.                 StudentAssessmentTestScore          money,
  288.                 AssessmentTestPerformanceLevelId    int,
  289.                 AssessmentTestPerformanceLevel      varchar(100),
  290.                 AssessmentTestPerformanceLevelColor varchar(6)
  291.         )
  292.         ---------------------------------------------
  293.         INSERT  @StudentAssessmentTestScoresWithBlanks
  294.         SELECT  SAT.StudentId,
  295.                 SAT.AssessmentTestId,
  296.                 SAT.AssessmentTestOrdinalByGroup,
  297.                 SATS.StudentAssessmentTestScore,
  298.                 SATS.AssessmentTestPerformanceLevelId,
  299.                 SATS.AssessmentTestPerformanceLevel,
  300.                 SATS.AssessmentTestPerformanceLevelColor
  301.         FROM    @StudentsAndTests SAT
  302.         LEFT
  303.         JOIN    @StudentAssessmentTestScores SATS
  304.           ON    SAT.StudentId = SATS.StudentId
  305.          AND    SAT.AssessmentTestId = SATS.AssessmentTestId
  306.         ---------------------------------------------
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.         ---------------------------------------------
  316.         -- Assessment-Tests / Performance-Levels
  317.         ---------------------------------------------
  318.         DECLARE @AssessmentTests Xml -- varchar(max)
  319.         ---------------------------------------------
  320.         SET @AssessmentTests = (
  321.                 SELECT  AT.AssessmentTestId AS '@AssessmentTestId',
  322.                         AssessmentTestLabel AS '@Label',
  323.                         AssessmentTestIsPassFail AS '@IsPassFail',
  324.                         ATG.AssessmentTestGroupId AS '@AssessmentTestGroupId',
  325.                         ATG.AssessmentTestGroup AS '@AssessmentTestGroup',
  326.                         HighestPossibleScore AS '@HighestPossibleScore',
  327.                         LowestPossibleScore AS '@LowestPossibleScore',
  328.                         MinimumPassingScore AS '@MinimumPassingScore',
  329.                         AssessmentTestOrdinalByGroup AS '@Ordinal',
  330.                         --AssessmentTestSubjectAreaId,
  331.                         -------------------------
  332.                         AssessmentTestPerformanceLevelId AS 'PerformanceLevel/@AssessmentTestPerformanceLevelId',
  333.                         AssessmentTestPerformanceLevel AS 'PerformanceLevel/@PerformanceLevel',
  334.                         AssessmentTestPerformanceLevelColor AS 'PerformanceLevel/@Color',
  335.                         AssessmentTestPerformanceLevelMinimumScore AS 'PerformanceLevel/@MinimumScore',
  336.                         AssessmentTestPerformanceLevelMaximumScore AS 'PerformanceLevel/@MaximumScore',
  337.                         AssessmentTestPerformanceLevelOrdinalByTest AS 'PerformanceLevel/@Ordinal'
  338.                 --FROM  @AssessmentTestPerformanceLevels
  339.                 FROM    @AssessmentTestIds I
  340.                 JOIN    AssessmentTests AT
  341.                   ON    I.AssessmentTestId = AT.AssessmentTestId
  342.                 JOIN    AssessmentTestPerformanceLevels ATPL
  343.                   ON    AT.AssessmentTestId = ATPL.AssessmentTestId
  344.                 LEFT
  345.                 JOIN    AssessmentTestGroups ATG
  346.                   ON    AT.CorrespondingAssessmentTestGroupId = ATG.AssessmentTestGroupId
  347.                 AND  AT.CorrespondingAssessmentTestGroupId <> @AssessmentTestGroupId
  348.                 FOR XML PATH('AssessmentTest'),ROOT('AssessmentTests')               
  349.         )      
  350.         ---------------------------------------------
  351.         SET @AssessmentTests = dbo.XmlNormalize(@AssessmentTests)
  352.         --SELECT @AssessmentTests AS '@AssessmentTests'
  353.         ---------------------------------------------
  354.  
  355.  
  356.         ---------------------------------------------
  357.         -- Assessment-Test-Group
  358.         ---------------------------------------------
  359.         DECLARE @AssessmentTestGroup Xml -- varchar(max)
  360.         ---------------------------------------------
  361.         SET @AssessmentTestGroup = (
  362.                 SELECT  *
  363.                 FROM    AssessmentTestGroups AssessmentTestGroup
  364.                 WHERE   AssessmentTestGroupId = @AssessmentTestGroupId
  365.                 FOR XML AUTO, ROOT('AssessmentTestGroups')               
  366.         )      
  367.         ---------------------------------------------
  368.         --SELECT @AssessmentTestGroup AS '@AssessmentTestGroup'
  369.         ---------------------------------------------
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.         ---------------------------------------------
  377.         -- StudentAssessmentTestScores-Levels
  378.         ---------------------------------------------
  379.         DECLARE @StudentAssessmentTestScoresXml Xml -- varchar(max)
  380.         ---------------------------------------------
  381.         SET @StudentAssessmentTestScoresXml = (
  382.                 SELECT  Student.StudentId,-- AS 'StudentId',
  383.                         Student.FirstName,-- AS 'FirstName',
  384.                         Student.LastName,-- AS 'LastName',
  385.                         Student.OrdinalText,-- AS '@OrdinalText',
  386.                         -------------------------
  387.                         StudentAssessmentTestScore.AssessmentTestId,-- AS '@AssessmentTestId',
  388.                         StudentAssessmentTestScore.StudentAssessmentTestScore AS 'Score',
  389.                         StudentAssessmentTestScore.AssessmentTestPerformanceLevel AS 'PerformanceLevel',
  390.                         StudentAssessmentTestScore.AssessmentTestPerformanceLevelColor AS 'Color',
  391.                         StudentAssessmentTestScore.AssessmentTestOrdinalByGroup AS 'Ordinal'
  392.                 FROM    @Students Student
  393.                 JOIN    @StudentAssessmentTestScoresWithBlanks StudentAssessmentTestScore
  394.                   ON    Student.StudentId = StudentAssessmentTestScore.StudentId   
  395.                 ORDER
  396.                    BY   Student.OrdinalText,
  397.                         Student.StudentId,
  398.                         StudentAssessmentTestScore.AssessmentTestOrdinalByGroup
  399.                 FOR XML AUTO,ROOT('StudentAssessmentTestScores')                 
  400.         )      
  401.         ---------------------------------------------
  402.         --SELECT @StudentAssessmentTestScoresXml AS '@StudentAssessmentTestScoresXml'
  403.         ---------------------------------------------
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.         ---------------------------------------------
  411.         -- Assemble output Xml
  412.         ---------------------------------------------
  413.         SET @AssessmentTestGroup = dbo.XmlAdopt(@AssessmentTestGroup, @AssessmentTests, 'AssessmentTestGroup', 'AssessmentTest')
  414.         --SET @Xml = dbo.XmlAdopt(@Xml,@AssessmentTests,'Xml','AssessmentTest')
  415.         SET @Xml = dbo.XmlAdopt(@Xml,@AssessmentTestGroup,'Xml','AssessmentTestGroup')
  416.         SET @Xml = dbo.XmlAdopt(@Xml,@StudentAssessmentTestScoresXml,'Xml','StudentAssessmentTestScores')
  417.         ---------------------------------------------
  418.  
  419.  
  420.  
  421.         ---------------------------------------------
  422.         -- Track Assembly time
  423.         ---------------------------------------------
  424.         DECLARE @XmlAssemblyTimeInMilliseconds int = DATEDIFF(ms, @StartTime,  CAST(GETDATE() as time))
  425.         SET @Xml = dbo.XmlAssignAttributeValues(@Xml, '//Xml', 'xmlAssemblyTimeInMilliseconds', @XmlAssemblyTimeInMilliseconds)
  426.         ---------------------------------------------
  427.  
  428.  
  429.         --SELECT @Xml AS '@Xml'
  430.         ---------------------------------------------
  431.         RETURN @Xml
  432. END
  433. GO
Add Comment
Please, Sign In to add comment