如何简化此存储过程?

时间:2014-05-28 15:14:50

标签: sql stored-procedures

如何简化此存储过程?我只想把名字,生日和性别拉一次。此外,各个SQL语句使用一些相同的记录。有没有办法使用相同的字段,但让它看看不同的标准?

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

1 个答案:

答案 0 :(得分:0)

根据注释,是的,如果要从select语句中删除字段和tEmployee表,可以执行此操作,然后使用@Employee参数的连接替换该表的连接。加入tEmployee.ID的任何地方,请改用@Employee。