Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.45 KB | None | 0 0
  1. GO
  2. IF EXISTS(
  3.     SELECT 1
  4.     FROM sysobjects
  5.     WHERE Type = 'P'
  6.           AND Name = 'Reports_Ytd_arrest_totals_comparison'
  7. )
  8.   DROP PROCEDURE Reports_Ytd_arrest_totals_comparison
  9. GO
  10. CREATE PROCEDURE Reports_Ytd_arrest_totals_comparison
  11.   (
  12.       @YearsToCompare VARCHAR(30)
  13.     , @FilterType     INTEGER = 0
  14.     , @FilterValue    VARCHAR(1000) = NULL
  15.   )
  16. AS
  17.   BEGIN
  18.     SET NOCOUNT ON;
  19.     DECLARE @m_statistics TABLE(
  20.     GroupHeader [TypCrimeDetail]
  21.     , [Month] VARCHAR(3)
  22.     , [Year] VARCHAR(4)
  23.     )
  24.  
  25.     DECLARE @m_years TABLE([Year] INT);
  26.  
  27.     INSERT @m_years ([Year])
  28.       SELECT DISTINCT [Number]
  29.       FROM [dbo].[dbIntegerListToTable](@YearsToCompare)
  30.       ORDER BY [Number]
  31.  
  32.     -- For all cases, grouped by crime class
  33.     IF @FilterType = 0
  34.       BEGIN
  35.         INSERT INTO @m_statistics
  36.           SELECT
  37.             CC.ccClass                                   CrimeClass,
  38.             LEFT(DATENAME(MONTH, [NAC].[ArrestDate]), 3) [Month],
  39.             DATEPART(YEAR, [NAC].[ArrestDate])           [Year]
  40.           FROM NameArrestContact NAC
  41.             JOIN Associations A
  42.               ON A.AssociateTo = NAC.NameArrestContactId
  43.             JOIN CrimeCodes CC
  44.               ON A.AssociateWith = CC.CrimeCodesId
  45.           WHERE DATEPART(YEAR, [NAC].[ArrestDate]) IN (SELECT [Year]
  46.                                                        FROM @m_years)
  47.                 AND A.AssociateToType = 'NACT'
  48.                 AND A.AssociateWithType = 'CRCD'
  49.       END
  50.     -- Filter by crime classification
  51.     ELSE IF @FilterType = 5
  52.       BEGIN
  53.         DECLARE @m_classes TABLE([Class] VARCHAR(20));
  54.  
  55.         INSERT @m_classes ([Class])
  56.           SELECT DISTINCT [string]
  57.           FROM [dbo].[dbStringListToTable](@FilterValue)
  58.  
  59.         DECLARE @m_person BIT = (
  60.           SELECT 1
  61.           FROM @m_classes c
  62.           WHERE c.[Class] = 'CrimeAgainstPerson'
  63.         );
  64.         DECLARE @m_prop BIT = (
  65.           SELECT 1
  66.           FROM @m_classes c
  67.           WHERE c.[Class] = 'CrimeAgainstProperty'
  68.         );
  69.         DECLARE @m_society BIT = (
  70.           SELECT 1
  71.           FROM @m_classes c
  72.           WHERE c.[Class] = 'CrimeAgainstSociety'
  73.         );
  74.         DECLARE @m_part1 BIT = (
  75.           SELECT 1
  76.           FROM @m_classes c
  77.           WHERE c.[Class] = 'Part_1'
  78.         );
  79.         DECLARE @m_part2 BIT = (
  80.           SELECT 1
  81.           FROM @m_classes c
  82.           WHERE c.[Class] = 'Part_2'
  83.         );
  84.         DECLARE @m_drug BIT = (
  85.           SELECT 1
  86.           FROM @m_classes c
  87.           WHERE c.[Class] = 'DrugAbuse'
  88.         );
  89.         DECLARE @m_liquor BIT = (
  90.           SELECT 1
  91.           FROM @m_classes c
  92.           WHERE c.[Class] = 'LiquorLaws'
  93.         );
  94.         DECLARE @m_weapon BIT = (
  95.           SELECT 1
  96.           FROM @m_classes c
  97.           WHERE c.[Class] = 'WeaponCrimes'
  98.         );
  99.         DECLARE @m_hate BIT = (
  100.           SELECT 1
  101.           FROM @m_classes c
  102.           WHERE c.[Class] = 'HateCrime'
  103.         );
  104.         DECLARE @m_crime BIT = (
  105.           SELECT 1
  106.           FROM @m_classes c
  107.           WHERE c.[Class] = 'CriminalActivity'
  108.         );
  109.         DECLARE @m_service BIT = (
  110.           SELECT 1
  111.           FROM @m_classes c
  112.           WHERE c.[Class] = 'ServiceActivity'
  113.         );
  114.         DECLARE @m_president BIT = (
  115.           SELECT 1
  116.           FROM @m_classes c
  117.           WHERE c.[Class] = 'PresidentRept'
  118.         );
  119.         DECLARE @m_chief BIT = (
  120.           SELECT 1
  121.           FROM @m_classes c
  122.           WHERE c.[Class] = 'ChiefRept'
  123.         );
  124.         DECLARE @m_other BIT = (
  125.           SELECT 1
  126.           FROM @m_classes c
  127.           WHERE c.[Class] = 'Other'
  128.         );
  129.  
  130.         INSERT INTO @m_statistics
  131.           SELECT
  132.             CC.ccClass                                   CrimeClass,
  133.             LEFT(DATENAME(MONTH, [NAC].[ArrestDate]), 3) [Month],
  134.             DATEPART(YEAR, [NAC].[ArrestDate])           [Year]
  135.           FROM NameArrestContact NAC
  136.             JOIN Associations A
  137.               ON A.AssociateTo = NAC.NameArrestContactId
  138.             JOIN CrimeCodes CC
  139.               ON A.AssociateWith = CC.CrimeCodesId
  140.           WHERE DATEPART(YEAR, [NAC].[ArrestDate]) IN (SELECT [Year]
  141.                                                        FROM @m_years)
  142.                 AND A.AssociateToType = 'NACT'
  143.                 AND A.AssociateWithType = 'CRCD'
  144.                 AND (
  145.                   (@m_person = 1 AND [CC].[ccAgainstPerson] = 1)
  146.                   OR (@m_prop = 1 AND [CC].[ccAgainstProperty] = 1)
  147.                   OR (@m_society = 1 AND [CC].[ccAgainstSociety] = 1)
  148.                   OR (@m_part1 = 1 AND [CC].[ccUCRPart1] = 1)
  149.                   OR (@m_part2 = 1 AND [CC].[ccPart2] = 1)
  150.                   OR (@m_drug = 1 AND [CC].[ccDrugAbuse] = 1)
  151.                   OR (@m_liquor = 1 AND [CC].[ccLiquorLaw] = 1)
  152.                   OR (@m_weapon = 1 AND [CC].[ccWeapon] = 1)
  153.                   OR (@m_hate = 1 AND [CC].[ccHateCrime] = 1)
  154.                   OR (@m_crime = 1 AND [CC].[ccCrime] = 1)
  155.                   OR (@m_service = 1 AND [CC].[ccService] = 1)
  156.                   OR (@m_president = 1 AND [CC].[ccUserDefined1] = 1)
  157.                   OR (@m_chief = 1 AND [CC].[ccUserDefined2] = 1)
  158.                   OR (@m_other = 1
  159.                       AND [CC].[ccAgainstPerson] = 0
  160.                       AND [CC].[ccAgainstProperty] = 0
  161.                       AND [CC].[ccAgainstSociety] = 0
  162.                       AND [CC].[ccUCRPart1] = 0
  163.                       AND [CC].[ccPart2] = 0
  164.                       AND [CC].[ccDrugAbuse] = 0
  165.                       AND [CC].[ccLiquorLaw] = 0
  166.                       AND [CC].[ccWeapon] = 0
  167.                       AND [CC].[ccHateCrime] = 0
  168.                       AND [CC].[ccCrime] = 0
  169.                       AND [CC].[ccService] = 0
  170.                       AND [CC].[ccUserDefined1] = 0
  171.                       AND [CC].[ccUserDefined2] = 0)
  172.                 )
  173.       END
  174.  
  175.     SELECT
  176.       [R].GroupHeader,
  177.       [R].[Year],
  178.       ISNULL([R].[Jan], 0) [Jan],
  179.       ISNULL([R].[Feb], 0) [Feb],
  180.       ISNULL([R].[Mar], 0) [Mar],
  181.       ISNULL([R].[Apr], 0) [Apr],
  182.       ISNULL([R].[May], 0) [May],
  183.       ISNULL([R].[Jun], 0) [Jun],
  184.       ISNULL([R].[Jul], 0) [Jul],
  185.       ISNULL([R].[Aug], 0) [Aug],
  186.       ISNULL([R].[Sep], 0) [Sep],
  187.       ISNULL([R].[Oct], 0) [Oct],
  188.       ISNULL([R].[Nov], 0) [Nov],
  189.       ISNULL([R].[Dec], 0) [Dec]
  190.     FROM (
  191.            SELECT *
  192.            FROM (
  193.                   SELECT
  194.                     [CC].GroupHeader,
  195.                     [y].[Year]         [Year],
  196.                     [R].[Month],
  197.                     COUNT([R].[Month]) [count]
  198.                   FROM @m_years [y]
  199.                     -- cross join is needed to add years when event did not occurred at all
  200.                     CROSS JOIN (
  201.                                  SELECT DISTINCT [S].GroupHeader
  202.                                  FROM @m_statistics [S]
  203.                                ) [CC]
  204.                     LEFT JOIN @m_statistics [R]
  205.                       ON [y].[Year] = [R].[Year]
  206.                          AND [CC].GroupHeader = [R].GroupHeader
  207.                   GROUP BY [CC].GroupHeader
  208.                     , [y].[Year]
  209.                     , [R].[Month]
  210.                 ) t
  211.            PIVOT (
  212.              SUM([t].[count])
  213.            FOR [Month] IN (Jan, Feb, Mar, Apr,
  214.                May, Jun, Jul, Aug, Sep, Oct, Nov, [Dec])
  215.            ) p
  216.          ) [R]
  217.     ORDER BY [R].GroupHeader
  218.   END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement