If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Database Server Software > Microsoft SQL Server > problem filtering

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 02-10-12, 08:52
sibersan sibersan is offline
Registered User
 
Join Date: Feb 2012
Posts: 2
Red face problem filtering

I recently started learning sql. i'm working on a exercise and now i'm stuck. I've spent hours searching the web but i couldnt find any answers

here's my work:

select dbo.Products.ProductName,
SUM (dbo.[order details].unitprice * dbo.[order details].Quantity) as Amount
from dbo.[Order Details]
inner join dbo.Orders on dbo.[Order Details].OrderID = dbo.Orders.OrderID
inner join dbo.Products on dbo.[Order Details].ProductID = dbo.Products.ProductID
where dbo.orders.orderdate
between '1997-01-01 00:00:00.000' and '1997-12-31 00:00:00.000' --and Amount >= 15000.00
group by dbo.Products.ProductName
order by dbo.Products.ProductName desc




my problem is i'm trying to filter the "Amount" so only ones with a "Amount" greater than or equal to # will display.


thanks
Reply With Quote
  #2 (permalink)  
Old 02-10-12, 09:34
Wim Wim is offline
Registered User
 
Join Date: Nov 2004
Posts: 1,280
This should work
Code:
select dbo.Products.ProductName,
    SUM (dbo.[order details].unitprice * dbo.[order details].Quantity) as Amount
from dbo.[Order Details]
    inner join dbo.Orders on 
        dbo.[Order Details].OrderID = dbo.Orders.OrderID
    inner join dbo.Products on 
        dbo.[Order Details].ProductID = dbo.Products.ProductID
where dbo.orders.orderdate between '1997-01-01 00:00:00.000' and '1997-12-31 00:00:00.000' 
group by dbo.Products.ProductName
HAVING SUM (dbo.[order details].unitprice * dbo.[order details].Quantity) >= 15000.00
order by dbo.Products.ProductName desc
The HAVING clause works on the aggerated data of the GROUP BY.

Also handy when you want to select on groups, based on the amount of records:

Find all duplicates in a table:

SELECT ....
FROM...
WHERE...
GROUP BY aUniqueColumn
HAVING COUNT(*) > 1


Select the smallest football teams

SELECT FootballTeam.Name, COUNT(*) as NbrOfMembers
FROM ...
WHERE...
GROUP BY FootballTeamName
HAVING COUNT(*) < 100
__________________
With kind regards . . . . . SQL Server 2000/2005/2008/2008 R2 Earned beers: 16
Wim
Beware of bugs in the above code; I have only proved it correct, not tried it. -- Donald Knuth
Grabel's Law: 2 is not equal to 3 -- not even for very large values of 2.
Pat Phelan's Law: 2 very definitely CAN equal 3 -- in at least two programming languages

Last edited by Wim; 02-10-12 at 09:43.
Reply With Quote
  #3 (permalink)  
Old 02-10-12, 09:55
sibersan sibersan is offline
Registered User
 
Join Date: Feb 2012
Posts: 2
Yea it worked. Thanks
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On