如何简化此存储过程?我只想把名字,生日和性别拉一次。此外,各个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
答案 0 :(得分:0)
根据注释,是的,如果要从select语句中删除字段和tEmployee表,可以执行此操作,然后使用@Employee参数的连接替换该表的连接。加入tEmployee.ID的任何地方,请改用@Employee。