2012-09-24 46 views
0

這裏的情況:我有一個表SunflowerSeeds在SQL Server 2008中的SQL Server:存儲過程的挑戰

CREATE TABLE [dbo].[SunflowerSeeds](
    [Color] [nvarchar](50) NULL, 
    [SeedType] [nvarchar](50) NULL, 
    [Price] float NULL 
) 

爲了簡單起見,我還沒有插入數據的長長的名單。

數據插入到表看起來是這樣的:

Insert into [dbo].[SunflowerSeeds] (Color, SeedType, Price) 
SELECT 'Yellow', 'Dwarf', 20 
UNION ALL 
SELECT 'Brown', 'Garden', 30 
UNION ALL 
SELECT 'Red', 'Garden', 35 

,可以提高種子的價格現在,我已經提供了各種矩陣。

  1. Polenless(YES/NO):如果是,由10%提高價格
  2. 高度(> 13" ):如果是,8%
  3. 有機提高價格(YES/NO) :如果是的,由15%
  4. 生命週期提高價格(Annual- YES/NO):如果是,由12%提高價格

每個數據插入行可以具有YES或NO的值的每一個上面列出的矩陣我需要想出一個過程來返回基於Price的新價格每個種子在SunFlowerseeds表中並考慮到矩陣的組合。

對於例如,如果黃矮是polenless,具有高度> 13」 ,有機YES並且具有年度生命週期然後將新的價格已經被計算爲

10% + 8%+15%+12% = 45% = 1+ 0.45= 1.45 

然後新的價格爲:1.45 * Original Price= 1.45*20 = 29

對於組合的其餘部分也是如此。

我正在考慮編寫一個SQL Server存儲過程,以便稍後可以在我的C#代碼中調用它。存儲過程的I/p參數將爲ColorSeedType。有了這兩個參數,我可以得到Price

挑戰是如何計算每種種子的新Price與適用矩陣的組合 - Polenless,高度,有機,LifeCycle。任何人都可以點我一個正確的方式來做到這一點。請幫助我。 TIA。

回答

2

假設顏色和SeedType的葵花籽該組合是獨一無二的:

CREATE PROCEDURE UpdatePrice 
    @Polenless BIT, 
    @Height BIT, 
    @Organic BIT, 
    @Lifecycle BIT, 
    @color NVARCHAR(50), 
    @seedType NVARCHAR(50) 

AS 
BEGIN 
    UPDATE SunflowerSeeds 
    SET Price = Price + 
         ((Price * 0.1) * @Polenless)+ 
         ((Price * 0.08) * @Height)+ 
         ((Price * 0.15) * @Organic)+ 
         ((Price * 0.12) * @Lifecycle) 
    WHERE Color = @color AND SeedType = @seedType 

END 
GO 

您也可以使用int類型,而不是@Polenless,@height,@Organic,@Lifecycle的逐位標誌。

+0

不是'&'但是'*'。 –

+0

@AndriyM,爲什麼&?我正在做和爲零,如果沒有設置 – CjCoax

+0

[你試過你的代碼?](http://sqlfiddle.com/#!3/d41d8/4605) –