简体   繁体   中英

How do I simplfy this Stored Procedure?

How do I simplify this Stored Procedure? I only want the name, birthdate and gender to pull once. Also, the individual SQL Statements use some of the same records. Is there a way to use the same field, but have it look at different criteria?

USE [OHM]
GO
/****** Object:  StoredProcedure [dbo].[SP_GetVaccineForEE]    Script Date:  
05/28/2014    10:07:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      <>
-- Create date: <April 30, 2014>
-- Description: <Stored Procedure to gather data for Employee Health Record>
-- =============================================
ALTER PROCEDURE [dbo].[SP_GetVaccineForEE]
-- Add the parameters for the stored procedure here
  @Employee VARCHAR(30)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
--Hepatitis Vaccine--
  SELECT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS Gender
    , tEmployeeWorkDetail.Department
    , IMMUNE.FLDDATE AS [Hep Vaccine Date]
    , IMMUNE.FLDTYPE AS [Hep Vaccine]
    , IMMTYPE.FLDDESCR AS [Vaccine Descr]
    , IMMUNE.FLDMANUFACT AS [Hep Manufacturer]
    , IMMUNE.FLDLOTNUM AS [Lot Number]
    , IMMUNE.FLDADMIN AS [Hep Given By]
    , IMMUNE.FLDNOTE1 AS [NOTE]
    , HEPLAB.FLDSANTBVAL AS [Hep Surface Antibody]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
    ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
LEFT JOIN OHM.ohmuser.HEPATITS
    ON tEmployee.EmployeeID = HEPATITS.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.HEPLAB
    ON tEmployee.EmployeeID = HEPLAB.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.IMMUNE
    ON tEmployee.EmployeeID = IMMUNE.FLDEMPLOYEE
INNER JOIN OHM.ohmuser.IMMTYPE
    ON IMMUNE.FLDTYPE = IMMTYPE.FLDCODE
WHERE tEmployee.ID = @Employee
    AND IMMUNE.FLDTYPE IN (
        '105'
        , 'HBIG'
        , 'HEPA'
        )
ORDER BY IMMUNE.FLDDATE

SELECT DISTINCT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS Gender
    , tEmployeeWorkDetail.Department
    , HEPLAB.FLDCOMMENT AS [Vaccine Descr]
    , HEPLAB.FLDDATE AS [Hep Vaccine Date]
    , HEPLAB.FLDSANTBVAL AS [Hep Surface Antibody]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
    ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
LEFT JOIN OHM.ohmuser.HEPATITS
    ON tEmployee.EmployeeID = HEPATITS.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.HEPLAB
    ON tEmployee.EmployeeID = HEPLAB.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.IMMUNE
    ON tEmployee.EmployeeID = IMMUNE.FLDEMPLOYEE
INNER JOIN OHM.ohmuser.IMMTYPE
    ON IMMUNE.FLDTYPE = IMMTYPE.FLDCODE
WHERE tEmployee.ID = @Employee
    AND IMMUNE.FLDTYPE IN (
        '105'
        , 'HBIG'
        , 'HEPA'
        )
ORDER BY HEPLAB.FLDDATE 

--FLU Vaccine-
SELECT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS Gender
    , tEmployeeWorkDetail.Department
    , IMMUNE.FLDDATE AS [Date]
    , IMMUNE.FLDTYPE AS [Vaccine]
    , IMMTYPE.FLDDESCR AS [Vaccine Descr]
    , IMMUNE.FLDNOTE1 AS [Comments]
    , IMMUNE.FLDMANUFACT AS [Mfr]
    , IMMUNE.FLDLOTNUM AS [Lot #]
    , IMMUNE.FLDADMIN AS [Given By]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
    ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
LEFT JOIN OHM.ohmuser.IMMUNE
    ON tEmployee.EmployeeID = IMMUNE.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.IMMTYPE
    ON IMMUNE.FLDTYPE = IMMTYPE.FLDCODE
WHERE tEmployee.ID = @Employee
    AND IMMUNE.FLDTYPE IN (
        '109'
        , '109A'
        , '109B'
        , '109C'
        , 'HIN1IM'
        , 'HIN1IS'
        , 'FLUID'
        , 'FLUHD'
        , 'FLULOA'
        , '109QIM'
        , '109QIS'
        )
ORDER BY IMMUNE.FLDDATE

--MMR Vaccine--
 SELECT DISTINCT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS Gender
    , tEmployeeWorkDetail.Department
    , IMMUNE.FLDDATE AS [Date]
    , IMMUNE.FLDTYPE AS [Procedure]
    , IMMTYPE.FLDDESCR AS [Procedure Descr]
    , IMMUNE.FLDNOTE1 AS [Comments]
    , IMMUNE.FLDMANUFACT AS [Mfr]
    , IMMUNE.FLDLOTNUM AS [Lot No]
    , IMMUNE.FLDADMIN AS [Given By]
    , IMMUNE.FLDCLINIC AS [Clinic]
    , TITER.FLDRESULT AS [Titer Result]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
    ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
LEFT JOIN OHM.ohmuser.IMMUNE
    ON tEmployee.EmployeeID = IMMUNE.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.IMMTYPE
    ON IMMUNE.FLDTYPE = IMMTYPE.FLDCODE
LEFT JOIN OHM.ohmuser.TITER
    ON tEmployee.EmployeeID = TITER.FLDEMPLOYEE
WHERE tEmployee.ID = @Employee
    AND IMMUNE.FLDTYPE IN (
        '102'
        , '104'
        , '107'
        , '108'
        , 'MMRDEC'
        )
 ORDER BY IMMUNE.FLDDATE

--Miscellaneous Examinations and Tests--
--Vision
  SELECT DISTINCT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS [Gender]
    , VISION.FLDDATE AS [Vision Date]
    , VISCOLOR.FLDDESCR AS [Vision Color Perception]
    , PHYSICAL.FLDDESCR AS [Vision Exam]
    , PERESULT.FLDDESCR AS [Vision Result]
    , VISION.FLDEXAMINER AS [Examiner]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.VISION
    ON tEmployee.EmployeeID = VISION.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.VISCOLOR
    ON VISION.FLDCOLOR = VISCOLOR.FLDCODE
LEFT JOIN OHM.ohmuser.PERESULT
    ON VISION.FLDRESULT = PERESULT.FLDCODE 
LEFT JOIN OHM.ohmuser.PHYSLOG
        ON tEmployee.EmployeeID = PHYSLOG.FLDEMPLOYEE
INNER JOIN OHM.ohmuser.PHYSICAL
        ON PHYSLOG.FLDTYPE = PHYSICAL.FLDCODE 
WHERE tEmployee.ID = @Employee
    AND VISION.FLDDATE IS NOT NULL

--Misc Vaccines - TDAP, TD, Zostavax, Varicella, Smallpox--
SELECT tEmployee.ID AS [Employee Number]
    , tEmployee.LastName
    , tEmployee.FirstName
    , tEmployee.BirthDate AS [Date of Birth]
    , tEmployee.Sex AS Gender
    , tEmployeeWorkDetail.Department
    , IMMUNE.FLDDATE AS [Date]
    , IMMUNE.FLDTYPE AS [Procedure]
    , IMMTYPE.FLDDESCR AS [Procedure Descr]
    , IMMUNE.FLDNOTE1 AS [Comments]
    , IMMUNE.FLDMANUFACT AS [Mfr]
    , IMMUNE.FLDLOTNUM AS [Lot #]
    , IMMUNE.FLDADMIN AS [Given By]
FROM OHM.ohmuser.tEmployee
LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
    ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
LEFT JOIN OHM.ohmuser.IMMUNE
    ON tEmployee.EmployeeID = IMMUNE.FLDEMPLOYEE
LEFT JOIN OHM.ohmuser.IMMTYPE
    ON IMMUNE.FLDTYPE = IMMTYPE.FLDCODE
WHERE tEmployee.ID = @Employee
    AND IMMUNE.FLDTYPE IN (
        '101'
        , '110'
        , 'BCG'
        , 'CHOL'
        , 'CMVIG'
        , 'DIP'
        , 'DT'
        , 'DTAP'
        , 'DTAPHB'
        , 'DTP'
        , 'DTPHIB'
        , 'MEN'
        , 'PERT'
        , 'PLAGUE'
        , 'PNEU'
        , 'OPV'
        , 'RABIES'
        , 'RIG'
        , 'TIG'
        , 'YELLOW'
        , 'MENA'
        , 'TYPHO'
        , 'TYPHIM'
        , 'TWIN'
        , 'ZOST'
        , 'TDAP'
        , 'TWXDEC'
        , 'TDPDEC'
        , 'VARDEC'
        , 'MENDEC'
        , 'SMALLP'
        , 'TDDEC'
        , 'TD'
        , 'TETDEC'
        , 'IPOL'
        )
        ORDER BY IMMUNE.FLDDATE

--Respirator FIT Testing--
        SELECT DISTINCT tEmployee.ID AS [Employee Number]
        , tEmployee.LastName
        , tEmployee.FirstName
        , tEmployee.BirthDate AS [Date of Birth]
        , tEmployee.Sex AS [Gender]
        , FITTEST.FLDDATE AS [DATE]
        , RESPRATR.FLDDESCR
        , RESPCL.FLDTYPE AS [Procedure]
        , RESPCL.FLDNOTE AS [Note]
        , RESPCL.FLDLEVEL AS [Clearance Level]
        , FITTEST.FLDEXAMINER AS [Examiner]
        FROM OHM.ohmuser.tEmployee
    LEFT JOIN OHM.ohmuser.RESPCL
        ON tEmployee.EmployeeID = RESPCL.FLDEMPLOYEE
    LEFT JOIN OHM.ohmuser.FITTEST
        ON tEmployee.EmployeeID = FITTEST.FLDEMPLOYEE
    INNER JOIN OHM.ohmuser.RESPRATR
        ON FITTEST.FLDRESPIRTR = RESPRATR.FLDCODE    
    WHERE tEmployee.ID = @Employee
        AND RESPCL.FLDDATE IS NOT NULL

        --Tuberculosis Screening--
    SELECT tEmployee.ID AS [Employee Number]
        , tEmployee.LastName
        , tEmployee.FirstName
        , tEmployee.BirthDate AS [Date of Birth]
        , tEmployee.Sex AS [Gender]
        , tEmployeeWorkDetail.Department
        , TUBER.FLDDATE AS [Date]
        , TUBER.FLDREASON AS [Skin Testing]
        , TUBER.FLDNOTE AS [Notes]
        , TUBER.FLDMANUFACT AS [Manufacturer]
        , TUBER.FLDLOTNUM AS [Lot Number]
        , TUBER.FLDMMREACT AS [MMReact]
        , TUBER.FLDCLASS AS [Result]
        , IGRA.FLDDATE AS [IGRA Date]
        , IGRA.FLDIGRATYPE AS [Type]
        , IGRA.FLDRESULT AS [IGRA Result]
        , IGRA.FLDLAB AS [Lab]
              -- Added by Mooose
              , 'TB Skin Test ' + Cast(TUBER.FLDMMREACT as varchar(20)) + ' MM ' + case when TUBER.FLDCLASS = 'N' then 'Neg' Else 'Pos' End  Screening



    FROM OHM.ohmuser.tEmployee
    LEFT JOIN OHM.ohmuser.tEmployeeWorkDetail
        ON tEmployee.EmployeeID = tEmployeeWorkDetail.EmployeeID
    LEFT JOIN OHM.ohmuser.TUBER
        ON tEmployee.EmployeeID = TUBER.FLDEMPLOYEE
    LEFT JOIN OHM.ohmuser.IGRA
        ON TUBER.FLDEMPLOYEE = IGRA.FLDEMPLOYEE
    WHERE tEmployee.ID = @Employee
        AND TUBER.FLDDATE IS NOT NULL

Given the comments, yes, if you want to remove the fields and tEmployee table from the select statements, you can do this, and then replace joins to that table with a join to the @Employee parameter. Anywhere that Joined to tEmployee.ID, use @Employee instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM