[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

SQL question

Posted on 2013-01-12
5
Medium Priority
?
186 Views
Last Modified: 2013-01-13
I have  the following tables in the attachment.  I need to find  

Which parts need to be ordered from our supplier now?


 Who ordered the most value?

Who ordered the most quantity?
sqltables.doc
0
Comment
Question by:ocdc
  • 3
  • 2
5 Comments
 
LVL 23

Expert Comment

by:Steve Wales
ID: 38771446
1) What parts need to be ordered ?  (Assuming that stockqty is your stock on hand).

You want to find all the parts where the SOH has reached the reorder point.  Your example doesn't hold a reorder quantity column so hard to say how much you're supposed to order.

select partid, description
from Inventory
where stockqty <= reorderpnt

Open in new window


2) Who ordered the most value ?

This query gives you a sorted list of suppliers and the sum of the orders they had placed, in descending order of value and you take the first one.

select top 1 o.custid, c.cname, sum(oi.qty * i.price) as OrderValue
from Orders o
join OrderItems oi on o.orderid = oi.orderid
join Inventory i on oi.partid = i.partid
join Customers c on o.custid = c.custid
group by o.custid, c.cname
order by OrderValue desc

Open in new window


3) Who ordered the most quantity

We can take the previous query and change it up just a little.

select top 1 o.custid, c.cname, sum(oi.qty) as OrderQty
from Orders o
join OrderItems oi on o.orderid = oi.orderid
join Customers c on o.custid = c.custid
group by o.custid, c.cname
order by OrderQty desc

Open in new window


I'm sure there are other ways to do it, but I believe this comes pretty close to it (I have a test system with close to this layout of data, so I checked the basis of these queries there and it seemed to give me the correct data - and then converted the column and table names to match your specification).  

Also won't promise that it's the most efficient way of doing things, I don't do a lot of development these days - but it seems to get the job done :)
0
 

Author Comment

by:ocdc
ID: 38772765
Thanks. they worked.    what about  

Which sales people have NOT sold anything?    Subquery version

Which sales people have NOT sold anything? JOIN version (explicit/named JOIN)
0
 
LVL 23

Expert Comment

by:Steve Wales
ID: 38772946
Assuming you have an Employees table (that's not in your attachment):

Salesmen with no sales (Subquery)

select empid 
from Employees
where empid not in (select empid from Orders);

Open in new window


Salesmen with no sales (JOIN)

select empid
from
(
select e.empid, max(o.salesdate) as last_sale
from employees e
left outer join orders o
on e.empid = o.empid
group by e.empid
)
where last_sale is null;

Open in new window


Alternatively, you could use distinct:

select distinct empid
from
(
select e.empid, o.salesdate as last_sale
from employees e
left outer join orders o
on e.empid = o.empid
)
where last_sale is null;

Open in new window

0
 

Author Comment

by:ocdc
ID: 38773019
Thanks.   final one is  

 Who placed the most orders?
0
 
LVL 23

Accepted Solution

by:
Steve Wales earned 2000 total points
ID: 38773065
select top 1 custid, count(*) as num_orders
from Orders
group by custid
order by num_orders desc
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

I've encountered valid database schemas that do not have a primary key.  For example, I use LogParser from Microsoft to push IIS logs into a SQL database table for processing and analysis.  However, occasionally due to user error or a scheduled task…
So every once in a while at work I am asked to export data from one table and insert it into another on a different server.  I hate doing this.  There's so many different tables and data types.  Some column data needs quoted and some doesn't.  What …
This Micro Tutorial will teach you how to add a cinematic look to any film or video out there. There are very few simple steps that you will follow to do so. This will be demonstrated using Adobe Premiere Pro CS6.
This video shows how to quickly and easily deploy an email signature for all users in Office 365 and prevent it from being added to replies and forwards. (the resulting signature is applied on the server level in Exchange Online) The email signat…

834 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