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

x
Solved

# SQL question

Posted on 2013-01-12
Medium Priority
186 Views
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
Question by:ocdc
• 3
• 2

LVL 23

Expert Comment

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
``````

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
``````

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
``````

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

ID: 38772765

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

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);
``````

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;
``````

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;
``````
0

Author Comment

ID: 38773019
Thanks.   final one is

Who placed the most orders?
0

LVL 23

Accepted Solution

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

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…
###### Suggested Courses
Course of the Month18 days, 13 hours left to enroll