Solved

SQL Server Query Order Allocation

Posted on 2010-09-09
4
309 Views
Last Modified: 2012-08-13
I have two SQL Server database tables.

table: tbSalesOrder
columns: SalesOrderNumber, OrderQty

table: tbSerialNumber
columns: SerialNumber, SalesOrderNumber (Sales Order to which the Serial Number is assigned)

I want to return a list of Sales Order Numbers where the Order Qty is less than the assigned Serial Numbers for that Sales Order. Basically, I need a list of Sales Orders that do not have enough Serial Numbers assigned to fill the order.

Serial Numbers can only be assigned to one Sales Order and Sales Orders can be assigned to more than one Serial Number.

Any help with the T-SQL to make this happen?
0
Comment
Question by:yonbret
  • 2
  • 2
4 Comments
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
ID: 33638628
this should do:
;with data as (select t.SalesOrderNumber, t1.OrderQty
         , sum(case when t2.SerialNumber is not null then 1 else 0 end) serials
   from tbSalesOrder t1
   left join tbSerialNumber t2
     on t2.SalesOrderNumber = t1.SalesOrderNumber 
   group by t1.SalesOrderNumber, t1.OrderQty
)
select data.*
  from data
 where data.OrderQty > data.Serials

Open in new window

0
 

Author Comment

by:yonbret
ID: 33638828
I have the following code, the portion in the parenthesis is running perfect when ran by itself. However, when I run the whole thing, I am getting an error message: No column was specified for column 1 of 'data'.

I am confused why this error is being generated. Any help?
with data as (select LTrim(RTrim(t1.SONo)), t1.tranlineNo, t1.QtyOrd
         , sum(case when t2.SerialNumber is not null then 1 else 0 end) serials
   from SageProSOTRAN01 t1
   left join tbSerialNumberShipment t2
     on LTrim(RTrim(t1.SONo)) = t2.SalesOrder and  t1.tranlineno = t2.LineNumber
   group by t1.SoNo, t1.tranlineNo, t1.QtyOrd
)
select data.*
  from data
 where data.QtyOrd > data.Serials

Open in new window

0
 

Author Closing Comment

by:yonbret
ID: 33639034
I took the LTrim(RTrim()) out and it worked fine. I move the Trim to the second select statement and got the same result.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 33640127
to fix that error:
with data as (select LTrim(RTrim(t1.SONo)) SoNo, t1.tranlineNo, t1.QtyOrd
         , sum(case when t2.SerialNumber is not null then 1 else 0 end) serials
   from SageProSOTRAN01 t1
   left join tbSerialNumberShipment t2
     on LTrim(RTrim(t1.SONo)) = t2.SalesOrder and  t1.tranlineno = t2.LineNumber
   group by LTrim(RTrim(t1.SONo)), t1.tranlineNo, t1.QtyOrd
)
select data.*
  from data
 where data.QtyOrd > data.Serials

Open in new window

0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Using examples as well as descriptions, and references to Books Online, show the documentation available for datatypes, explain the available data types and show how data can be passed into and out of variables.
Viewers will learn how the fundamental information of how to create a table.

790 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