• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 261
  • Last Modified:

case statement not following desire logic correctly

I am trying to input the pseudo-code below into a sql case statement

but i think is not working because the 3rd scenario is not applying when appropriate.

pseudo code:
A. If “Requested Price” have value then calculate “Requested Price” minus “Total Cost” divided “Requested Price” equal “Expected Margin”
B. If “Suggested Price” have value then calculate “Suggested Price” minus “Total Cost” divided “Suggested Price” equal “Expected Margin”
C. If “Requested Price” and “Suggested Price” both have values then calculate “Suggested Price” minus “Total Cost” divided “Suggested Price” equal “Expected Margin”


,	ExpectedMargin = CASE 
						WHEN [sql].[SalesQuotePriceRequested] <> 0 
						THEN (
								[sql].[SalesQuotePriceRequested]			
								- (										
									ROUND([sql].UnitCostMaterial,2)
									+ROUND([sql].[TotalLabor_OHCost], 2)
									+ROUND([sql].[UnitCostFreight], 2)
									+[sql].[UnitCostSGA]	
									+ROUND([sql].[UnitCostDiscount], 2)
									+[sql].[AdditionalCost]
								  )										
							 ) / [sql].[SalesQuotePriceRequested]
						WHEN [sql].[SuggestedPrice] <> 0
						THEN (
								[sql].[SuggestedPrice]					
								- (										
									ROUND([sql].UnitCostMaterial,2)
									+ROUND([sql].[TotalLabor_OHCost], 2)
									+ROUND([sql].[UnitCostFreight], 2)
									+[sql].[UnitCostSGA]	
									+ROUND([sql].[UnitCostDiscount], 2)
									+[sql].[AdditionalCost]
								  )										
							 ) / [sql].[SuggestedPrice] 
						WHEN ([sql].[SalesQuotePriceRequested] <> 0 AND [sql].[SuggestedPrice] <> 0)
						THEN (
								[sql].[SuggestedPrice]					
								- (										
									ROUND([sql].UnitCostMaterial,2)
									+ROUND([sql].[TotalLabor_OHCost], 2)
									+ROUND([sql].[UnitCostFreight], 2)
									+[sql].[UnitCostSGA]	
									+ROUND([sql].[UnitCostDiscount], 2)
									+[sql].[AdditionalCost]
								  )										
							 ) / [sql].[SuggestedPrice] 
				     END

Open in new window

0
metropia
Asked:
metropia
2 Solutions
 
Jim HornMicrosoft SQL Server Developer, Architect, and AuthorCommented:
For starters, wayy too many {TAB} characters.

After that, I recommend a nesting that goes something like this, with your third block moved to the first, as in the current order both 1 and 2 will be correct before 3, which is causing unnecessary processing.

<air code>
CASE
  WHEN Requested Price IS NOT NULL AND  “Suggested Price” IS NOT NULL
      THEN Expected Margin = --  that calculation goes here
  WHEN Requested Price IS NOT NULL 
      THEN Expected Margin = --  that calculation goes here
  WHEN Suggested Price IS NOT NULL 
      THEN Expected Margin = --  that calculation goes here
END

Open in new window

0
 
Scott PletcherSenior DBACommented:
You have to do the last WHEN first, otherwise it's never reached:


                                    WHEN ([sql].[SalesQuotePriceRequested] <> 0 AND [sql].[SuggestedPrice] <> 0)
                                    THEN (
                                                [sql].[SuggestedPrice]                              
                                                - (                                                            
                                                      ROUND([sql].UnitCostMaterial,2)
                                                      +ROUND([sql].[TotalLabor_OHCost], 2)
                                                      +ROUND([sql].[UnitCostFreight], 2)
                                                      +[sql].[UnitCostSGA]      
                                                      +ROUND([sql].[UnitCostDiscount], 2)
                                                      +[sql].[AdditionalCost]
                                                  )
0
 
metropiaAuthor Commented:
thank you experts!
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now