Guest User

Untitled

a guest
Jun 20th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 15.21 KB | None | 0 0
  1. USE [SDS_DevSchoolDistrict]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[AssessmentTestGroupScoresByStudentGroupAsXml]    Script Date: 02/09/2012 16:55:16 ******/
  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 = 15
  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 xmlAssemblyTimeInMilliseconds=""></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.                 AT_G.AssessmentTestOrdinalByGroup
  84.         FROM    AssessmentTests_Groups AT_G
  85.         WHERE   AT_G.AssessmentTestGroupId = @AssessmentTestGroupId
  86.         ---------------------------------------------
  87.         --SELECT * FROM @AssessmentTestIds
  88.         ---------------------------------------------
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.         ---------------------------------------------
  98.         -- Student Assessment Test Scores
  99.         ---------------------------------------------
  100.         DECLARE @StudentAssessmentTestScores TABLE (
  101.                 StudentId                           int,
  102.                 AssessmentTestId                    int,
  103.                 StudentAssessmentTestScore          money,
  104.                 AssessmentTestOrdinalByGroup        int,
  105.                 AssessmentTestPerformanceLevelId    int,
  106.                 AssessmentTestPerformanceLevel      varchar(100),
  107.                 AssessmentTestPerformanceLevelColor varchar(6)
  108.         )
  109.         ---------------------------------------------
  110.         INSERT  @StudentAssessmentTestScores (
  111.                 StudentId,
  112.                 AssessmentTestId, StudentAssessmentTestScore, AssessmentTestOrdinalByGroup)
  113.         SELECT  SATS.StudentId,
  114.                 SATS.AssessmentTestId,
  115.                 SATS.StudentAssessmentTestScore,
  116.                 ATI.AssessmentTestOrdinalByGroup
  117.         FROM    Students_Groups S_G
  118.         JOIN    (   SELECT  iSATS.StudentId,
  119.                             iSATS.AssessmentTestId,
  120.                             iSATS.AssessmentTestPerformanceLevelId,
  121.                             iSATS.StudentAssessmentTestScoreId,
  122.                             iSATS.StudentAssessmentTestScore,
  123.                             ROW_NUMBER() OVER(
  124.                                     PARTITION BY iSATS.AssessmentTestId, iSATS.StudentId
  125.                                     ORDER BY iSATS.StudentAssessmentTestScore DESC,
  126.                                              iSATS.StudentAssessmentTestScoreId DESC) AS ScoreRank
  127.                     FROM    StudentAssessmentTestScores iSATS
  128.                     JOIN    @AssessmentTestIds iATI
  129.                       ON    iSATS.AssessmentTestId = iATI.AssessmentTestId
  130.                 ) SATS
  131.           ON    S_G.StudentId = SATS.StudentId
  132.          AND    S_G.StudentGroupId = @StudentGroupId
  133.          AND    SATS.ScoreRank = 1     
  134.         JOIN    @AssessmentTestIds ATI
  135.           ON    SATS.AssessmentTestId = ATI.AssessmentTestId
  136.         ---------------------------------------------
  137.         --SELECT COUNT(DISTINCT AssessmentTestId) FROM @StudentAssessmentTestScores
  138.         ---------------------------------------------
  139.  
  140.  
  141.  
  142.  
  143.  
  144.         ---------------------------------------------
  145.         -- Re-populate Assessment test id, to only get tests with score
  146.         ---------------------------------------------
  147.         DELETE  @AssessmentTestIds
  148.         ---------------------------------------------
  149.         INSERT  @AssessmentTestIds
  150.         SELECT  AssessmentTestId,
  151.                 AT_G.AssessmentTestOrdinalByGroup
  152.         FROM    AssessmentTests_Groups AT_G
  153.         WHERE   AT_G.AssessmentTestGroupId = @AssessmentTestGroupId
  154.           AND   EXISTS (
  155.                         SELECT  1
  156.                         FROM    @StudentAssessmentTestScores SATS
  157.                         WHERE   SATS.AssessmentTestId = AT_G.AssessmentTestId
  158.                 )
  159.         ---------------------------------------------
  160.         --SELECT COUNT(*) FROM @AssessmentTestIds
  161.         ---------------------------------------------
  162.  
  163.  
  164.  
  165.  
  166.         ---------------------------------------------
  167.         -- StudentIds
  168.         ---------------------------------------------
  169.         DECLARE @StudentIds TABLE (
  170.                 StudentId   int
  171.         )
  172.         ---------------------------------------------
  173.         INSERT  @StudentIds(StudentId)
  174.         SELECT  DISTINCT S.StudentId
  175.         FROM    @StudentAssessmentTestScores S
  176.         ---------------------------------------------
  177.         --SELECT * FROM @StudentIds
  178.         ---------------------------------------------
  179.  
  180.  
  181.  
  182.  
  183.  
  184.         ---------------------------------------------
  185.         -- Students
  186.         ---------------------------------------------
  187.         DECLARE @Students TABLE (
  188.                 StudentId   int,
  189.                 FirstName   varchar(100),
  190.                 LastName    varchar(100),
  191.                 DisplayName varchar(300),
  192.                 OrdinalText varchar(300)
  193.         )
  194.         ---------------------------------------------
  195.         INSERT  @Students(StudentId, FirstName, LastName, DisplayName, OrdinalText)
  196.         SELECT  P.PersonId,
  197.                 P.FirstName,
  198.                 P.LastName,
  199.                 P.FirstName + ' ' + P.LastName,
  200.                 P.LastName + ', ' + P.FirstName
  201.         FROM    @StudentIds S
  202.         JOIN    dbo.DataViewModePersons(NULL,@DataViewMode) P
  203.           ON    S.StudentId = P.PersonId
  204.         ---------------------------------------------
  205.         --SELECT * FROM @Students
  206.         ---------------------------------------------
  207.  
  208.  
  209.  
  210.  
  211.         ---------------------------------------------
  212.         -- Student CROSS JOIN Tests
  213.         ---------------------------------------------
  214.         DECLARE @StudentsAndTests TABLE (
  215.                 StudentId                       int,
  216.                 AssessmentTestId                int,
  217.                 AssessmentTestOrdinalByGroup    int
  218.         )
  219.         ---------------------------------------------
  220.         INSERT  @StudentsAndTests
  221.         SELECT  S.StudentId,
  222.                 T.AssessmentTestId,
  223.                 T.AssessmentTestOrdinalByGroup
  224.         FROM    @StudentIds S
  225.         CROSS
  226.         JOIN    @AssessmentTestIds T
  227.         ---------------------------------------------
  228.         --SELECT * FROM @StudentsAndTests ORDER BY StudentId, AssessmentTestOrdinalByGroup
  229.         ---------------------------------------------
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240. /*      ---------------------------------------------
  241.         --
  242.         ---------------------------------------------
  243.         DECLARE @AssessmentTestPerformanceLevels TABLE
  244.         (       -------------------------------------------
  245.                 AssessmentTestPerformanceLevelId            int NOT NULL,
  246.                 AssessmentTestPerformanceLevel              varchar(50),
  247.                 AssessmentTestPerformanceLevelMinimumScore  int,
  248.                 AssessmentTestPerformanceLevelMaximumScore  int,
  249.                 AssessmentTestPerformanceLevelColor         varchar(20),
  250.                 AssessmentTestPerformanceLevelOrdinalByTest int,
  251.                 AssessmentTestPerformanceLevelMeetsStandard bit,
  252.                 AssessmentTestId                            int,
  253.                 HighestPossibleScore                        int,
  254.                 LowestPossibleScore                         int,
  255.                 MinimumPassingScore                         int,
  256.                 AssessmentTestLabel                         varchar(200),
  257.                 AssessmentTestIsPassFail                    bit,
  258.                 CorrespondingAssessmentTestGroupId          int,
  259.                 AssessmentTestOrdinalByGroup                int
  260.                 -------------------------------------------
  261.                 PRIMARY KEY (AssessmentTestPerformanceLevelId)
  262.         )
  263.         ---------------------------------------------
  264.         INSERT  @AssessmentTestPerformanceLevels  (
  265.                 AssessmentTestPerformanceLevelId,
  266.                 AssessmentTestPerformanceLevel,
  267.                 AssessmentTestPerformanceLevelMinimumScore,
  268.                 AssessmentTestPerformanceLevelMaximumScore,
  269.                 AssessmentTestPerformanceLevelColor,
  270.                 AssessmentTestPerformanceLevelOrdinalByTest,
  271.                 AssessmentTestPerformanceLevelMeetsStandard,
  272.                 AssessmentTestId,
  273.                 HighestPossibleScore,
  274.                 LowestPossibleScore,
  275.                 MinimumPassingScore,
  276.                 AssessmentTestLabel,
  277.                 AssessmentTestIsPassFail,
  278.                 CorrespondingAssessmentTestGroupId,
  279.                 AssessmentTestOrdinalByGroup
  280.         )       -------------------------------------------
  281.         SELECT  ATPL.AssessmentTestPerformanceLevelId,
  282.                 ATPL.AssessmentTestPerformanceLevel,
  283.                 ATPL.AssessmentTestPerformanceLevelMinimumScore,
  284.                 ATPL.AssessmentTestPerformanceLevelMaximumScore,
  285.                 ATPL.AssessmentTestPerformanceLevelColor,
  286.                 ATPL.AssessmentTestPerformanceLevelOrdinalByTest,
  287.                 CASE
  288.                     WHEN(ATPL.AssessmentTestPerformanceLevelMinimumScore >= AT.MinimumPassingScore)
  289.                     THEN CAST(1 AS bit)
  290.                     ELSE CAST(0 AS bit)
  291.                 END, --PL.AssessmentTestPerformanceLevelMeetsStandard
  292.                 ATPL.AssessmentTestId,
  293.                 AT.HighestPossibleScore,
  294.                 AT.LowestPossibleScore,
  295.                 AT.MinimumPassingScore,
  296.                 AT.AssessmentTestLabel,
  297.                 AT.AssessmentTestIsPassFail,
  298.                 AT.CorrespondingAssessmentTestGroupId,
  299.                 I.AssessmentTestOrdinalByGroup
  300.         FROM    @AssessmentTestIds I
  301.         JOIN    AssessmentTests AT
  302.           ON    I.AssessmentTestId = AT.AssessmentTestId
  303.         JOIN    AssessmentTestPerformanceLevels ATPL
  304.           ON    AT.AssessmentTestId = ATPL.AssessmentTestId  
  305.         ---------------------------------------------
  306.         --SELECT * FROM @AssessmentTestPerformanceLevels
  307. */      ---------------------------------------------
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.         ---------------------------------------------
  319.         -- Assessment-Tests / Performance-Levels
  320.         ---------------------------------------------
  321.         DECLARE @AssessmentTests Xml -- varchar(max)
  322.         ---------------------------------------------
  323.         SET @AssessmentTests = (
  324.                 SELECT  AT.AssessmentTestId AS '@AssessmentTestId',
  325.                         AssessmentTestLabel AS '@Label',
  326.                         AssessmentTestIsPassFail AS '@IsPassFail',
  327.                         CorrespondingAssessmentTestGroupId AS '@AssessmentTestGroupId',
  328.                         HighestPossibleScore AS '@HighestPossibleScore',
  329.                         LowestPossibleScore AS '@LowestPossibleScore',
  330.                         MinimumPassingScore AS '@MinimumPassingScore',
  331.                         AssessmentTestOrdinalByGroup AS '@Ordinal',
  332.                         --AssessmentTestSubjectAreaId,
  333.                         -------------------------
  334.                         AssessmentTestPerformanceLevelId AS '@AssessmentTestPerformanceLevelId',
  335.                         AssessmentTestPerformanceLevel AS 'PerformanceLevel/@PerformanceLevel',
  336.                         AssessmentTestPerformanceLevelColor AS 'PerformanceLevel/@Color',
  337.                         AssessmentTestPerformanceLevelMinimumScore AS 'PerformanceLevel/@MinimumScore',
  338.                         AssessmentTestPerformanceLevelMaximumScore AS 'PerformanceLevel/@MaximumScore',
  339.                         AssessmentTestPerformanceLevelOrdinalByTest AS 'PerformanceLevel/@Ordinal'
  340.                 --FROM  @AssessmentTestPerformanceLevels
  341.                 FROM    @AssessmentTestIds I
  342.                 JOIN    AssessmentTests AT
  343.                   ON    I.AssessmentTestId = AT.AssessmentTestId
  344.                 JOIN    AssessmentTestPerformanceLevels ATPL
  345.                   ON    AT.AssessmentTestId = ATPL.AssessmentTestId  
  346.                 FOR XML PATH('AssessmentTest'),ROOT('AssessmentTests')               
  347.         )      
  348.         ---------------------------------------------
  349.         SET @AssessmentTests = dbo.XmlNormalize(@AssessmentTests)
  350.         --SELECT @AssessmentTests AS '@AssessmentTests'
  351.         ---------------------------------------------
  352.  
  353.  
  354.         ---------------------------------------------
  355.         -- Assessment-Test-Group
  356.         ---------------------------------------------
  357.         DECLARE @AssessmentTestGroup Xml -- varchar(max)
  358.         ---------------------------------------------
  359.         SET @AssessmentTestGroup = (
  360.                 SELECT  *
  361.                 FROM    AssessmentTestGroups AssessmentTestGroup
  362.                 WHERE   AssessmentTestGroupId = @AssessmentTestGroupId
  363.                 FOR XML AUTO, ROOT('AssessmentTestGroups')               
  364.         )      
  365.         ---------------------------------------------
  366.         --SELECT @AssessmentTestGroup AS '@AssessmentTestGroup'
  367.         ---------------------------------------------
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.         ---------------------------------------------
  375.         -- StudentAssessmentTestScores-Levels
  376.         ---------------------------------------------
  377.         DECLARE @StudentAssessmentTestScoresXml Xml -- varchar(max)
  378.         ---------------------------------------------
  379.         SET @StudentAssessmentTestScoresXml = (
  380.                 SELECT  Student.StudentId,-- AS 'StudentId',
  381.                         Student.FirstName,-- AS 'FirstName',
  382.                         Student.LastName,-- AS 'LastName',
  383.                         Student.OrdinalText,-- AS '@OrdinalText',
  384.                         -------------------------
  385.                         StudentAssessmentTestScore.AssessmentTestId,-- AS '@AssessmentTestId',
  386.                         StudentAssessmentTestScore.StudentAssessmentTestScore AS 'Score',
  387.                         StudentAssessmentTestScore.AssessmentTestPerformanceLevel AS 'PerformanceLevel',
  388.                         StudentAssessmentTestScore.AssessmentTestPerformanceLevelColor AS 'Color',
  389.                         StudentAssessmentTestScore.AssessmentTestOrdinalByGroup AS 'Ordinal'
  390.                 FROM    @Students Student
  391.                 JOIN    @StudentAssessmentTestScores StudentAssessmentTestScore
  392.                   ON    Student.StudentId = StudentAssessmentTestScore.StudentId
  393.                 ORDER
  394.                    BY   Student.OrdinalText,
  395.                         StudentAssessmentTestScore.AssessmentTestOrdinalByGroup
  396.                 FOR XML AUTO,ROOT('StudentAssessmentTestScores')                 
  397.         )      
  398.         ---------------------------------------------
  399.         --SELECT @StudentAssessmentTestScoresXml AS '@StudentAssessmentTestScoresXml'
  400.         ---------------------------------------------
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.         ---------------------------------------------
  408.         -- Assemble output Xml
  409.         ---------------------------------------------
  410.         SET @AssessmentTestGroup = dbo.XmlAdopt(@AssessmentTestGroup, @AssessmentTests, 'AssessmentTestGroup', 'AssessmentTest')
  411.         --SET @Xml = dbo.XmlAdopt(@Xml,@AssessmentTests,'Xml','AssessmentTest')
  412.         SET @Xml = dbo.XmlAdopt(@Xml,@AssessmentTestGroup,'Xml','AssessmentTestGroup')
  413.         SET @Xml = dbo.XmlAdopt(@Xml,@StudentAssessmentTestScoresXml,'Xml','StudentAssessmentTestScores')
  414.         ---------------------------------------------
  415.  
  416.  
  417.  
  418.         ---------------------------------------------
  419.         -- Track Assembly time
  420.         ---------------------------------------------
  421.         DECLARE @XmlAssemblyTimeInMilliseconds int = DATEDIFF(ms, @StartTime,  CAST(GETDATE() as time))
  422.         SET @Xml = dbo.XmlAssignAttributeValues(@Xml, '//Xml', 'xmlAssemblyTimeInMilliseconds', @XmlAssemblyTimeInMilliseconds)
  423.         ---------------------------------------------
  424.  
  425.  
  426.         --SELECT @Xml AS '@Xml'
  427.         ---------------------------------------------
  428.         RETURN @Xml
  429. END
  430. GO
Add Comment
Please, Sign In to add comment