Solved

how to use 2 different date columns to select two different types of records.

Posted on 2014-03-06
10
183 Views
Last Modified: 2014-03-13
I need help writing an AND condition on my query that selects orders.

There are two types of orders: 'blanket' and 'standard'
For standards orders I need to look at the 'RequestedDeliverydate' field
For blanket orders I need to look at the 'ContractStart', 'ContractEnd' date

Both orders are found in the same table

The 2 parameters that are passed to the Stored Procedure are: 'StartDate', 'EndDate'

	
        SELECT 
		ItemNumber [ItemNumber]
	,	MAX(ItemDescription) [ItemDescription]
	,	MAX(ItemCategoryCode) [ItemCategoryCode]
	,	MAX(ItemFamilyGroupCode) [ItemFamilyGroupCode]
	,	MAX(ItemFamilyTypeCode) [ItemFamilyTypeCode]
	,	MAX(ItemSweetenerGroupCode) [ItemSweetenerGroupCode]
	,	MAX(ItemProductGroupCode) [ItemProductGroupCode]
	,	MAX(ItemDefaultProductionFacility) [ItemDefaultProductionFacility]
	,	MAX(SalesOrderLineTypeCode) [SalesOrderLineTypeCode]
	,	SUM(SalesOrderLineOpenQuantity) [SalesOrderLineOpenQuantity]
	,	MAX(ContractStartDate) [ContractStartDate]
	,	MAX(ContractEndDate) [ContractEndDate]
	,	MAX(RequestedDeliveryDate) [RequestedDeliveryDate]
	FROM 
		SalesOrderLine vsol
	WHERE 
		(
			SalesOrderTypeCode = 'BLANKET' AND  
			IsActiveBlanket = 1
		)
		OR	
		(
			SalesOrderTypeCode = 'STANDARD' AND 
			SalesOrderLineOpenQuantity <> 0
		)
	GROUP BY 
		ItemNumber

Open in new window


Thank you very much for your help.
0
Comment
Question by:metropia
  • 5
  • 4
10 Comments
 

Author Comment

by:metropia
ID: 39910752
I tried to do as below, but is does not work. for Blanket orders.

If I enter a date combination of:

Start Date: 3/15/2014      
End Date: 3/31/2014

That code misses the Blanket orders that have a ContracStartDate of 01/01/2014 and ContractEndDate of 06/01/2014 and so on.

	WHERE 
		(
			vsol.SalesOrderTypeCode = 'BLANKET' AND  
			vsol.IsActiveBlanket = 1 AND
			vsol.ContractStartDate >= @ReportStartDate AND vsol.ContractEndDate <= @ReportEndDate
		)
		OR	
		(
			vsol.SalesOrderTypeCode = 'STANDARD' AND 
			vsol.SalesOrderLineOpenQuantity <> 0 AND
			vsol.RequestedDeliveryDate BETWEEN @ReportStartDate AND @ReportEndDate
		)

Open in new window

0
 
LVL 65

Assisted Solution

by:Jim Horn
Jim Horn earned 100 total points
ID: 39910829
>For standards orders I need to look at the 'RequestedDeliverydate' field
>For blanket orders I need to look at the 'ContractStart', 'ContractEnd' date
SELECT blah, blah, blah, 
  CASE SalesOrderTypeCode
     WHEN 'BLANKET' THEN RequestedDeliverydate
     WHEN 'STANDARD' THEN ContractStart END as make_up_a_name_here
FROM YourTable

Open in new window

btw spell out what you mean by 'ContractStart', 'ContractEnd'

Also I have an article out there on SQL Server CASE Solutions, if it gives you any ideas that can help.
0
 

Author Comment

by:metropia
ID: 39910847
The dates are to be used on the where clause to limit the number of records returned
I know that for standard orders i can do a

requestdeliverydate between @startdate and @enddate

But for blanket orders is more tricky because I do not know how to use StartEnd columns, and StartDate,  EndDate parameters together and also, if I enter a date combination of:

Start Date: 3/15/2014      
End Date: 3/31/2014

That code misses the Blanket orders that have a ContracStartDate of 01/01/2014 and ContractEndDate of 06/01/2014 and so on.
0
 
LVL 11

Expert Comment

by:David Kroll
ID: 39910855
Do you mean that the 3/15/2014-3/31/2014 parameter dates fall between the contract start date of 1/1/2014 and end date of 6/1/2014 ?
0
 
LVL 11

Expert Comment

by:David Kroll
ID: 39910861
WHERE
            (
                  vsol.SalesOrderTypeCode = 'BLANKET' AND  
                  vsol.IsActiveBlanket = 1 AND
                         (@ReportStartDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate) AND      
 (@ReportEndDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate)             

            )
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:metropia
ID: 39910878
>>Do you mean that the 3/15/2014-3/31/2014 parameter dates fall between the contract start date of 1/1/2014 and end date of 6/1/2014 ?<<
yes
0
 
LVL 11

Accepted Solution

by:
David Kroll earned 400 total points
ID: 39910921
This should work for you then...
WHERE
            (
                  vsol.SalesOrderTypeCode = 'BLANKET' AND  
                  vsol.IsActiveBlanket = 1 AND
                         (@ReportStartDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate) AND      
 (@ReportEndDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate)             

            )
 

Open in new window

0
 

Author Comment

by:metropia
ID: 39910940
and to include the Standard orders, does this look correct to you?

	WHERE 
		(
			vsol.SalesOrderTypeCode = 'BLANKET' AND  
            vsol.IsActiveBlanket = 1 AND
            (@ReportStartDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate) AND      
			(@ReportEndDate BETWEEN vsol.ContractStartDate AND vsol.ContractEndDate)             

		)
 	OR	
		(
			vsol.SalesOrderTypeCode = 'STANDARD' AND 
			vsol.SalesOrderLineOpenQuantity <> 0 AND
			vsol.RequestedDeliveryDate BETWEEN @ReportStartDate AND @ReportEndDate
		)

Open in new window


Thank you.
0
 
LVL 11

Expert Comment

by:David Kroll
ID: 39910950
Yes, that looks fine if you just want the requested delivery date to be between the report start and report end dates.
0
 

Author Closing Comment

by:metropia
ID: 39926580
thank you very much for your help
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

760 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now