[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

SQL 2000 + converting a funtion to a query

Posted on 2008-10-14
1
Medium Priority
?
169 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 
LVL 37

Accepted Solution

by:
momi_sabag earned 2000 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

Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

Question has a verified solution.

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

An alternative to the "For XML" way of pivoting and concatenating result sets into strings, and an easy introduction to "common table expressions" (CTEs). Being someone who is always looking for alternatives to "work your data", I came across this …
This month, Experts Exchange sat down with resident SQL expert, Jim Horn, for an in-depth look into the makings of a successful career in SQL.
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.

656 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