Sql Syntax

Hello, Im having trouble writing a sql query.   I need to select l.LinkID, l.NavigateURL, l.ImageFile, l.Status and then also get a sum of rating field and a count of LinkID field where LinkID is equal to the one in the select statment.  My query below returns incorrect results for the count and sum fields.
 How can i fix this?

Thanks


SELECT l.LinkID, l.NavigateURL, l.ImageFile, l.Status, Sum(u.rating) As Rating, Count(o.LinkID) As Clicks
FROM LinkIndex l, UserRatings u, OutboundTraffic o
Where l.LinkID = u.LinkID and l.LinkID = o.LinkID
and l.Status In(0,1,2) and l.UserID = 1001 
Group By l.LinkID, l.NavigateURL, l.ImageFile, l.Status

Open in new window

grogo21Asked:
Who is Participating?
 
Cvijo123Connect With a Mentor Commented:
this should do it
SELECT
        l.LinkID,
        l.NavigateURL,
        l.ImageFile,
        l.Status,
        isnull(u.rating,0) AS Rating,
        isnull(o.Clicks,0) AS Clicks
FROM LinkIndex l
left join ( 
                Select sum(rating) as Rating, LinkID
                from UserRatings 
                group by LinkID
        ) u
on l.LinkID = u.LinkID
left join ( 
                Select count(LinkID) as Clicks, LinkID
                from OutboundTraffic
                group by LinkID
        ) o
on l.LinkId = o.LinkId

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
What is the actual data and expected results.  My current understanding is you want the sum for the whole entire list and likewise for count.  If that is true something like this would work.
WITH linkCTE AS (
	SELECT l.LinkID, l.NavigateURL, l.ImageFile, l.Status
	FROM LinkIndex l, UserRatings u, OutboundTraffic o
	Where l.LinkID = u.LinkID and l.LinkID = o.LinkID
	and l.Status In(0,1,2) and l.UserID = 1001 
)
SELECT DISTINCT *
,  (SELECT Sum(u.rating) FROM linkCTE) As Rating
,  (SELECT Count(o.LinkID) FROM linkCTE) As Clicks
FROM linkCTE

Open in new window

0
 
grogo21Author Commented:
Hello,

I need to select LinkIndex.LinkID, LinkIndex.NavigateURL, LinkIndex.ImageFile, LinkIndex.Status.
 
I also need to select sum(UserRatings.Rating) of all records from UserRatings Table where UserRatings.LinkID = LinkIndex.LinkID(The Link id in the select statment above)
I also need to select count(*) of all records from OutboundTraffic Table where OutboundTraffic .LinkID = LinkIndex.LinkID(The Link id in the select statment above)

I tried your query and i got error:
The multi-part identifier "u.rating" could not be bound.

Thanks!
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
Cvijo123Commented:
can u try this one will it work:
It can be done better my code, but i dont know wich table multiple your records so this way should work i think
SELECT
	l.LinkID,
	l.NavigateURL,
	l.ImageFile,
	l.Status,
	u.rating AS Rating,
	o.Clicks AS Clicks
FROM LinkIndex l
inner join ( 
		Select sum(rating) as Rating, LinkID
		from UserRatings 
		group by LinkID
	)
on l.LinkID = u.LinkID
inner join ( 
		Select count(LinkID) as Clicks, LinkID
		from OutboundTraffic
		group by LinkID
	) o
on l.LinkId = o.LinkId
							

Open in new window

0
 
Cvijo123Commented:
i miss alias after first inner join

so correct syntax should be
	
SELECT
	l.LinkID,
	l.NavigateURL,
	l.ImageFile,
	l.Status,
	u.rating AS Rating,
	o.Clicks AS Clicks
FROM LinkIndex l
inner join ( 
		Select sum(rating) as Rating, LinkID
		from UserRatings 
		group by LinkID
	) u
on l.LinkID = u.LinkID
inner join ( 
		Select count(LinkID) as Clicks, LinkID
		from OutboundTraffic
		group by LinkID
	) o
on l.LinkId = o.LinkId
							

Open in new window

0
 
Kevin CrossConnect With a Mentor Chief Technology OfficerCommented:
In that case, simply use something like what was just suggested.
0
 
grogo21Author Commented:
Cvijo123 your query looks good but there is one thing I still need.  When LinkId is not in OutboundLinks or UserRatings Table it does not return anything.  How can I select 0 for u.rating AS Rating or o.Clicks AS Clicks if they are not contained in the tables?

Thanks
0
 
grogo21Author Commented:
YESS!!

Thanks so much!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.