• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 173
  • Last Modified:

Sql Syntax

Hello, I was wondering how I can modify the sql query I have below so that instead of setting @StatCode manully each time It would select all of the StatCodes in a table and complete the operation below for each one.

The table and field which contains the StatCode values is StatSource.StatCode.


Thanks!
Declare @StatCode int
Set @StatCode = 8
select (select COUNT(Distinct(VisitorID))+.0 
		from OutboundTraffic 
		where VisitorID in(select VisitorID 
						   from InboundTraffic 
						   where StatCode = @StatCode))/(select COUNT(*) from Stats where StatCode = @StatCode)

Open in new window

0
grogo21
Asked:
grogo21
3 Solutions
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
something like this:
SELECT s.StatCode
     , ( select COUNT(Distinct(ot.VisitorID))+.0 
            from OutboundTraffic ot 
            where ot.VisitorID in ( select it.VisitorID 
                                       from InboundTraffic it
                                       where it.StatCode = s.StatCode
                                  ) 
       ) /  (select COUNT(*) from Stats where stats.StatCode = s.StatCode) as perc
  FROM StatSource s

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
An approach like this may work.  May have to tweak the join type to your liking, but hopefully you get the point of the derived tables.
SELECT t1.StatCode,
	CASE ISNULL(t2.sCount, 0) WHEN 0 THEN 0 
	ELSE ISNULL(t1.oCount, 0) / t2.sCount
	END AS StatCount
FROM 
(
	SELECT i.StatCode, COUNT(Distinct(o.VisitorID))+.0 As oCount
	FROM OutboundTraffic o INNER JOIN InboundTraffic i
	ON o.VisitorID = i.VisitorID
) AS t1
INNER JOIN
(
	SELECT StatCode, COUNT(*) AS sCount 
	FROM Stats
) AS t2
ON t1.StatCode = t2.StatCode

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
Sorry Angel, didn't see your post until just now.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
grogo21Author Commented:
mwvisa1: I got error:
Column 'InboundTraffic.StatCode' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

angelllll
what if (select COUNT(*) from Stats where stats.StatCode = s.StatCode) as perc = 0?

Thanks!
0
 
chapmandewCommented:
You'll have to account for it:

SELECT s.StatCode
     , case when (select COUNT(*) from Stats where stats.StatCode = s.StatCode)  = 0 then 0 else ( select COUNT(Distinct(ot.VisitorID))+.0
            from OutboundTraffic ot
            where ot.VisitorID in ( select it.VisitorID
                                       from InboundTraffic it
                                       where it.StatCode = s.StatCode
                                  )
       ) end /  (select COUNT(*) from Stats where stats.StatCode = s.StatCode) as perc
  FROM StatSource s
0
 
grogo21Author Commented:
I still get a divide by zero error.

Thanks!
0
 
Kevin CrossChief Technology OfficerCommented:
Sorry I forgot the group by statement.
SELECT t1.StatCode,
	CASE ISNULL(t2.sCount, 0) WHEN 0 THEN 0 
	ELSE ISNULL(t1.oCount, 0) / t2.sCount
	END AS StatCount
FROM 
(
	SELECT i.StatCode, COUNT(Distinct(o.VisitorID))+.0 As oCount
	FROM OutboundTraffic o INNER JOIN InboundTraffic i
	ON o.VisitorID = i.VisitorID
         GROUP BY i.StatCode
) AS t1
INNER JOIN
(
	SELECT StatCode, COUNT(*) AS sCount 
	FROM Stats
         GROUP BY StatCode
) AS t2
ON t1.StatCode = t2.StatCode

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
And you can change my alias StatCount to be StatPercent or something more appropriate.
0
 
grogo21Author Commented:
Thanks Everyone!
0

Featured Post

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now