Guest User

Untitled

a guest
Aug 5th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 9.87 KB | None | 0 0
  1. USE [SDS_DevSchoolDistrict]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[WidgetDataForStudentAbsencesAsXml]    Script Date: 05/04/2012 15:33:48 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9.  
  10. ALTER FUNCTION [dbo].[WidgetDataForStudentAbsencesForPrintAsXml]
  11. (       @EntityId       int,
  12.         @SchoolYearIdList varchar(500),
  13.         @DataViewMode   varchar(200) = 'Standard',
  14.         @EncryptIds     bit = 0,
  15.         @ApplicationUserId int,
  16.         @ApplicationUserPersonRoleId int = 1
  17. )
  18. RETURNS Xml
  19. AS
  20. BEGIN
  21.         /*---------------------------------------------
  22.         -- Debugging
  23.         --SELECT SCA.StudentId, COUNT(SCA.StudentClassAbsenceId) AS AbsneceCount FROM StudentClassAbsences SCA JOIN Classes C ON SCA.ClassId = C.ClassId AND C.SchoolYearId = 12 GROUP BY SCA.StudentId ORDER BY COUNT(SCA.StudentClassAbsenceId) DESC
  24.         ---------------------------------------------
  25.         --SELECT dbo.WidgetDataForStudentAbsencesAsXml(49895, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
  26.         ---------------------------------------------
  27.         DECLARE @EntityId       int             = 7001
  28.         DECLARE @SchoolYearIdList varchar(500)  = '5, 7, 9, 10, 11, 12'
  29.         DECLARE @DataViewMode   varchar(200)    = 'Standard'
  30.         DECLARE @EncryptIds     bit             = 0
  31.         DECLARE @ApplicationUserId  int         = 22
  32.         DECLARE @ApplicationUserPersonRoleId varchar(50)= 1
  33.         ---------------------------------------------*/
  34.  
  35.  
  36.        
  37.         ---------------------------------------------
  38.         -- Declare the return variable here
  39.         -- Prepare for performance metrics
  40.         ---------------------------------------------
  41.         DECLARE @Xml XML = '<Xml/>'
  42.         DECLARE @StartTime time = CAST(GETDATE() as time)
  43.         ---------------------------------------------
  44.  
  45.  
  46.         -------------------------------------------
  47.         -- Populate @School-Year-Ids
  48.         -------------------------------------------
  49.         DECLARE @SchoolYearIds TABLE ( SchoolYearId int )
  50.         -------------------------------------------
  51.         IF(RTRIM(LTRIM(@SchoolYearIdList)) <> '' AND @SchoolYearIdList IS NOT NULL)
  52.         BEGIN   -------------------------------------------
  53.                 INSERT  @SchoolYearIds
  54.                 SELECT  CAST(Value as int)
  55.                 FROM    dbo.SplitList(@SchoolYearIdList, ',')
  56.                 -------------------------------------------
  57.                 --SELECT * FROM @SchoolYearIds
  58.                 -------------------------------------------
  59.         END
  60.         ELSE
  61.         BEGIN   -------------------------------------------
  62.                 INSERT  @SchoolYearIds
  63.                 SELECT  SchoolYearId
  64.                 FROM    SchoolYears
  65.                 -------------------------------------------
  66.                 --SELECT * FROM @SchoolYearIds
  67.                 -------------------------------------------
  68.         END
  69.         -------------------------------------------
  70.        
  71.  
  72.         ------------------------------------
  73.         --
  74.         ------------------------------------
  75.         DECLARE  @StudentAbsencesTable TABLE
  76.         (
  77.             AbsenceDate     date,
  78.             ClassPeriodId   int,
  79.             --ClassPeriod   varchar(50),
  80.             StudentIsAbsent bit,
  81.             StudentIsTardy  bit,
  82.             AbsenceType     varchar(100),
  83.         --  ClassId         int,
  84.             SchoolYearId    int,
  85.             RowNumber       int
  86.         )
  87.         ------------------------------------
  88.         INSERT  @StudentAbsencesTable (
  89.                 AbsenceDate,
  90.                 ClassPeriodId,
  91.                 --ClassPeriod,
  92.                 StudentIsAbsent,
  93.                 StudentIsTardy,
  94.             --  ClassId,
  95.                 SchoolYearId,
  96.                 RowNumber
  97.         )  
  98.         SELECT  A.AbsenceDate,
  99.                 A.ClassPeriodId,
  100.                 A.StudentIsAbsent,
  101.                 A.StudentIsTardy,
  102.                 --ClassId,
  103.                 A.SchoolYearId,
  104.                 ROW_NUMBER() OVER(PARTITION BY A.AbsenceDate, A.ClassPeriodId ORDER BY A.StudentIsTardy DESC, A.StudentIsTardy DESC, A.ClassId)
  105.         FROM    @SchoolYearIds SYID
  106.         JOIN    StudentClassAbsences A
  107.           ON    A.SchoolYearId = SYID.SchoolYearId
  108.         WHERE   A.StudentId = @EntityId
  109.         ------------------------------------
  110.         DELETE  @StudentAbsencesTable
  111.         WHERE   RowNumber <> 1
  112.         ------------------------------------
  113.         UPDATE @StudentAbsencesTable
  114.         SET     AbsenceType = CASE
  115.                                     WHEN(StudentIsAbsent = 1)
  116.                                     THEN 'A'
  117.                                     WHEN(StudentIsTardy = 1)
  118.                                     THEN 'T'
  119.                                     ELSE ''
  120.                                 END
  121.         ------------------------------------
  122.         --SELECT * FROM  @StudentAbsencesTable ORDER By AbsenceDate, ClassPeriodId
  123.         ------------------------------------
  124.  
  125.  
  126.  
  127.  
  128.         ------------------------------------
  129.         --
  130.         ------------------------------------
  131.         DECLARE  @MaxClassPeriods TABLE
  132.         (
  133.             MaxClassPeriodId    int,
  134.             SchoolYearId        int
  135.         )
  136.         ------------------------------------
  137.         INSERT  @MaxClassPeriods
  138.         SELECT  MAX(SAT.ClassPeriodId),
  139.                 SAT.SchoolYearId
  140.         FROM    @StudentAbsencesTable SAT
  141.         GROUP
  142.            BY   SAT.SchoolYearId
  143.         ------------------------------------
  144.         --SELECT * FROM @MaxClassPeriods ORDER BY SchoolYearId
  145.         ------------------------------------
  146.  
  147.  
  148.  
  149.  
  150.  
  151.         ------------------------------------
  152.         --
  153.         ------------------------------------
  154.         DECLARE  @SchoolYearClassPeriods TABLE
  155.         (
  156.             ClassPeriodId   int,
  157.             SchoolYearId    int
  158.         )
  159.         ------------------------------------
  160.         DECLARE @MaxClassPeriodId int
  161.         DECLARE @SchoolYearId int
  162.         SELECT  @SchoolYearId = MAX(SchoolYearId)
  163.         FROM    @MaxClassPeriods
  164.         ------------------------------------
  165.         WHILE(@SchoolYearId IS NOT NULL)
  166.         BEGIN   -----------------------------------
  167.                 SELECT  @MaxClassPeriodId = MCP.MaxClassPeriodId
  168.                 FROM    @MaxClassPeriods MCP
  169.                 WHERE   MCP.SchoolYearId = @SchoolYearId
  170.                 -----------------------------------
  171.                 INSERT  @SchoolYearClassPeriods(ClassPeriodId, SchoolYearId)
  172.                 SELECT  CP.ClassPeriodId, @SchoolYearId
  173.                 FROM    ClassPeriods CP
  174.                 WHERE   CP.ClassPeriodId <= @MaxClassPeriodId
  175.                 -----------------------------------
  176.                 SELECT  @SchoolYearId = MAX(SchoolYearId)
  177.                 FROM    @MaxClassPeriods
  178.                 WHERE   SchoolYearId < @SchoolYearId
  179.         END     -----------------------------------
  180.         ------------------------------------
  181.         --SELECT * FROM @SchoolYearClassPeriods
  182.         ------------------------------------
  183.  
  184.  
  185.  
  186.    
  187.  
  188.         ------------------------------------
  189.         --
  190.         ------------------------------------
  191.         DECLARE  @Days TABLE
  192.         (
  193.             [Date]      date,
  194.             [Week]      int,
  195.             [Month]     int,
  196.             Label       varchar(100),
  197.             SchoolYearId int,
  198.             Ordinal     int IDENTITY(1, 1)
  199.         )
  200.         ------------------------------------
  201.         INSERT  @Days([Week], [Month], [Date], Label, SchoolYearId)
  202.         SELECT  DISTINCT
  203.                 D.[Week],
  204.                 D.[Month],
  205.                 D.[Date],
  206.                 CAST(D.[Month] as varchar(2)) + '/' + CAST(D.[Day] as varchar(2)),
  207.                 SAT.SchoolYearId
  208.         FROM    Dates D
  209.         JOIN    @StudentAbsencesTable SAT
  210.           ON    D.Date = SAT.AbsenceDate
  211.         ORDER
  212.            BY   D.[Date] DESC
  213.         ------------------------------------
  214.         --SELECT * FROM @Days ORDER BY Ordinal
  215.         ------------------------------------
  216.  
  217.  
  218.  
  219.         ------------------------------------
  220.         DECLARE @StudentAbsences Xml
  221.         -----------------------------------------------
  222.         SET @StudentAbsences = (
  223.                 SELECT  -------------------------
  224.                         SchoolYear.SchoolYearId,
  225.                         SchoolYear.SchoolYear,
  226.                         SchoolYear.SchoolYearOrdinal,
  227.                         ---------------------------
  228.                         [Date].[Date],
  229.                         [Date].Label,
  230.                         [Date].Ordinal,
  231.                         ---------------------------
  232.                         ClassPeriod.ClassPeriodId,
  233.                         ClassPeriod.ClassPeriod,
  234.                         ClassPeriod.AbsenceType
  235.                         -------------------------
  236.                 FROM    SchoolYears SchoolYear
  237.                 JOIN    @Days [Date]
  238.                   ON    [Date].SchoolYearId = SchoolYear.SchoolYearId
  239.                 JOIN    (
  240.                             SELECT  SYCP.SchoolYearId,
  241.                                     D.[Date],
  242.                                     SYCP.ClassPeriodId,
  243.                                     CP.ClassPeriod,
  244.                                     SAT.AbsenceDate,
  245.                                     SAT.AbsenceType,
  246.                                     SAT.StudentIsAbsent,
  247.                                     SAT.StudentIsTardy
  248.                             FROM    SchoolYears SY
  249.                             JOIN    @Days D
  250.                               ON    D.SchoolYearId = SY.SchoolYearId
  251.                             JOIN    @SchoolYearClassPeriods SYCP
  252.                               ON    SY.SchoolYearId = SYCP.SchoolYearId
  253.                             JOIN    ClassPeriods CP  
  254.                               ON    SYCP.ClassPeriodId = CP.ClassPeriodId
  255.                             LEFT
  256.                             JOIN    @StudentAbsencesTable SAT
  257.                               ON    SAT.ClassPeriodId = SYCP.ClassPeriodId
  258.                              AND    D.[Date] = SAT.AbsenceDate 
  259.                         ) ClassPeriod
  260.                   ON    SchoolYear.SchoolYearId = ClassPeriod.SchoolYearId
  261.                  AND    [Date].[Date] = ClassPeriod.[Date]
  262.                 ORDER
  263.                    BY   SchoolYear.SchoolYearOrdinal DESC,
  264.                         [Date].Ordinal,
  265.                         ClassPeriod.ClassPeriodId
  266.                        
  267.                 FOR XML AUTO, ROOT('StudentAbsences')    
  268.         )
  269.         -----------------------------------------------
  270.         --SELECT @StudentAbsences AS '@StudentAbsences'
  271.         ----------------------------------------------
  272.  
  273.  
  274.  
  275.  
  276.         ------------------------------------
  277.         DECLARE @SchoolYearClassPeriodsXml Xml
  278.         -----------------------------------------------
  279.         SET @SchoolYearClassPeriodsXml = (
  280.                 SELECT  SYCP.SchoolYearId AS '@SchoolYearId',
  281.                         CP.ClassPeriodId AS '@ClassPeriodId',
  282.                         CP.ClassPeriod AS '@ClassPeriod',
  283.                         CP.ClassPeriodCode AS '@Code',
  284.                         CP.ClassPeriodNumericalEquivalent AS '@ClassPeriodNumber',
  285.                         CP.ClassPeriodId AS '@Ordinal'
  286.                 FROM    @SchoolYearClassPeriods SYCP
  287.                 JOIN    ClassPeriods CP
  288.                   ON    SYCP.ClassPeriodId = CP.ClassPeriodId
  289.                 ORDER
  290.                    BY   SYCP.SchoolYearId,
  291.                         CP.ClassPeriodId
  292.                 FOR XML PATH('ClassPeriod'), ROOT('SchoolYearClassPeriods')  
  293.         )
  294.         -----------------------------------------------
  295.         --SELECT @SchoolYearClassPeriodsXml AS '@SchoolYearClassPeriodsXml'
  296.         ----------------------------------------------
  297.  
  298.        
  299.  
  300.  
  301.  
  302.         ---------------------------------------------
  303.         -- Assemble output Xml
  304.         ---------------------------------------------
  305.         SET @Xml = dbo.XmlAdopt(@Xml, @StudentAbsences, 'Xml', 'SchoolYear')
  306.         SET @Xml = dbo.XmlJoin(@Xml, @SchoolYearClassPeriodsXml, 'SchoolYear.SchoolYearId = ClassPeriod.SchoolYearId')
  307.         ---------------------------------------------
  308.  
  309.  
  310.  
  311.  
  312.         ---------------------------------------------
  313.         -- Track Assembly time
  314.         ---------------------------------------------
  315.         DECLARE @XmlAssemblyTimeInMilliseconds int = DATEDIFF(ms, @StartTime,  CAST(GETDATE() as time))
  316.         SET @Xml = dbo.XmlAssignAttributeValues(@Xml, '//Xml', 'xmlAssemblyTimeInMilliseconds', @XmlAssemblyTimeInMilliseconds)
  317.         ---------------------------------------------
  318.  
  319.  
  320.  
  321.     --SELECT @Xml AS '@Xml'
  322.     RETURN @Xml
  323. END
  324. GO
  325.  
  326. SELECT dbo.WidgetDataForStudentAbsencesForPrintAsXml(7001, '5, 7, 9, 10, 11, 12', DEFAULT, 0, 22, 1)
Add Comment
Please, Sign In to add comment