Solved

SQL 2000 + converting a funtion to a query

Posted on 2008-10-14
1
162 Views
Last Modified: 2012-08-14
For performance reasons...I need to change a user defined function into a query or stored procedure call...preferably something more simple if possible.  There are two functions.  I am attaching both.  I really only need this to be a select/subselect type of query if possible.

Thank you!
---function 1
 
 
CREATE FUNCTION [dbo].[OnyxAvgCompWorkorderEqpCost] 
(
	-- Add the parameters for the function here
	@projectID varchar(20)
)
RETURNS varchar(20)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @cost varchar(20),
			@total money,
			@comp decimal(5,2)
 
	-- Add the T-SQL statements to compute the return value here
	SELECT     @total=sum(sl.EXTDCOST)
    FROM        cms..SVC00200 sc join  cms.dbo.SVC00203 AS sl on sc.callnbr=sl.callnbr
				INNER JOIN dbo.OnyxProjectSvcCallList AS osl ON sl.CALLNBR = osl.SvcCallNumber 
				INNER JOIN dbo.OnyxProjectSiteList AS opsl ON osl.SvcCall2ProjectSite = opsl.objectid 
				INNER JOIN dbo.OnyxProjectHeader AS ph2 ON opsl.SiteList2Project = ph2.objectid
    WHERE     ph2.ProjectID = @projectid and sc.srvstat>='70C' AND(sl.LINITMTYP = 'P') AND (sl.ITEMUSETYPE = 'I' OR
                           sl.ITEMUSETYPE = 'C') and QTYSOLD>0
 
	select @comp= count(SSsc.objectid) from onyxprojectsitelist SSpsl join onyxprojectheader SSph on SSpsl.sitelist2project=SSph.objectid
				join OnyxProjectSvcCallList SSsc on SSsc.svcCall2projectsite=SSpsl.objectid
				join cms..SVC00200 SSc on SSsc.SvcCallNumber=SSc.callnbr
	where SSph.projectid=@projectid and SSc.SRVSTAT>='70C'
 
	if @comp>0 begin
		select @cost=convert(varchar(20),convert(money,@total/@comp),1)
	end else begin
		set @cost='0'
	end
	-- Return the result of the function
	RETURN @cost
 
END
 
 
 
----function 2
 
 
CREATE FUNCTION [dbo].[OnyxAvgCompWorkorderLaborCost] 
(
	-- Add the parameters for the function here
	@projectID varchar(20)
)
RETURNS varchar(20)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @cost varchar(20),
			@total money,
			@comp decimal(5,2)
 
	-- Add the T-SQL statements to compute the return value here
	SELECT     @total=sum(sl.EXTDCOST)
    FROM        cms..SVC00200 sc join  cms.dbo.SVC00203 AS sl on sc.callnbr=sl.callnbr
				INNER JOIN dbo.OnyxProjectSvcCallList AS osl ON sl.CALLNBR = osl.SvcCallNumber 
				INNER JOIN dbo.OnyxProjectSiteList AS opsl ON osl.SvcCall2ProjectSite = opsl.objectid 
				INNER JOIN dbo.OnyxProjectHeader AS ph2 ON opsl.SiteList2Project = ph2.objectid
    WHERE     ph2.ProjectID = @projectid and sc.srvstat>='70C' AND(sl.LINITMTYP = 'A') AND QTYSOLD>0
 
	select @comp= count(SSsc.objectid) from onyxprojectsitelist SSpsl join onyxprojectheader SSph on SSpsl.sitelist2project=SSph.objectid
				join OnyxProjectSvcCallList SSsc on SSsc.svcCall2projectsite=SSpsl.objectid
				join cms..SVC00200 SSc on SSsc.SvcCallNumber=SSc.callnbr
	where SSph.projectid=@projectid and SSc.SRVSTAT>='70C'
 
	if @comp>0 begin
		select @cost=convert(varchar(20),convert(money,@total/@comp),1)
	end else begin
		set @cost='0'
	end
	-- Return the result of the function
	RETURN @cost
 
END

Open in new window

0
Comment
Question by:Robb Hill
1 Comment
 
LVL 37

Accepted Solution

by:
momi_sabag earned 500 total points
ID: 22718604
the first one

select case when t2.comp > 0 then convert(varchar(20),convert(money,total/comp),1)
            else '0' end as cost
from
(      SELECT     sum(sl.EXTDCOST) as total
    FROM        cms..SVC00200 sc join  cms.dbo.SVC00203 AS sl on sc.callnbr=sl.callnbr
                        INNER JOIN dbo.OnyxProjectSvcCallList AS osl ON sl.CALLNBR = osl.SvcCallNumber
                        INNER JOIN dbo.OnyxProjectSiteList AS opsl ON osl.SvcCall2ProjectSite = opsl.objectid
                        INNER JOIN dbo.OnyxProjectHeader AS ph2 ON opsl.SiteList2Project = ph2.objectid
    WHERE     ph2.ProjectID = @projectid and sc.srvstat>='70C' AND(sl.LINITMTYP = 'P') AND (sl.ITEMUSETYPE = 'I' OR
                           sl.ITEMUSETYPE = 'C') and QTYSOLD>0
) t1
cross join
(
      select count(SSsc.objectid) as comp
      from onyxprojectsitelist SSpsl join onyxprojectheader SSph on SSpsl.sitelist2project=SSph.objectid
                        join OnyxProjectSvcCallList SSsc on SSsc.svcCall2projectsite=SSpsl.objectid
                        join cms..SVC00200 SSc on SSsc.SvcCallNumber=SSc.callnbr
      where SSph.projectid=@projectid and SSc.SRVSTAT>='70C'
) t2

the second one

select case when t1.comp > 0 then convert(varchar(20),convert(money,total/comp),1)
                  else '0' end as cost
from
(      SELECT     sum(sl.EXTDCOST) as total
    FROM        cms..SVC00200 sc join  cms.dbo.SVC00203 AS sl on sc.callnbr=sl.callnbr
                        INNER JOIN dbo.OnyxProjectSvcCallList AS osl ON sl.CALLNBR = osl.SvcCallNumber
                        INNER JOIN dbo.OnyxProjectSiteList AS opsl ON osl.SvcCall2ProjectSite = opsl.objectid
                        INNER JOIN dbo.OnyxProjectHeader AS ph2 ON opsl.SiteList2Project = ph2.objectid
    WHERE     ph2.ProjectID = @projectid and sc.srvstat>='70C' AND(sl.LINITMTYP = 'A') AND QTYSOLD>0
) t1 cross join
(
      select count(SSsc.objectid) as comp
      from onyxprojectsitelist SSpsl join onyxprojectheader SSph on SSpsl.sitelist2project=SSph.objectid
                        join OnyxProjectSvcCallList SSsc on SSsc.svcCall2projectsite=SSpsl.objectid
                        join cms..SVC00200 SSc on SSsc.SvcCallNumber=SSc.callnbr
      where SSph.projectid=@projectid and SSc.SRVSTAT>='70C'
) t2
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Everyone has problem when going to load data into Data warehouse (EDW). They all need to confirm that data quality is good but they don't no how to proceed. Microsoft has provided new task within SSIS 2008 called "Data Profiler Task". It solve th…
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question