0

场景如下:我SunflowerSeeds在 SQL Server 2008 中有一个表。

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. 有机(是/否):如果是,将价格提高 15%
  4. 生命周期(年度-是/否):如果是,将价格提高 12%

每个数据插入行对上面列出的每个矩阵都可以有 YES 或 NO 值。我需要想出一个过程来根据表Price中每个种子的返回新价格SunFlowerseeds并将矩阵组合纳入 a/c。

例如,如果黄矮星是无极的,高度 > 13 英寸,有机是并且具有年度生命周期,那么新价格必须计算为

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、height、Organic、LifeCycle。谁能指出我正确的做法。请帮助我。TIA。

4

1 回答 1

2

假设 SunflowerSeeds 中 Color 和 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。

于 2012-09-24T02:29:13.427 回答