2

価格が異なる長さの範囲があるとしましょう

Length      Price
0 - 10        18
11 - 15       20
16 - 20       30
21 - 40       45
41 - infinity 60

これらの情報をデータベースに保存する方法と、長さを入力したときに情報を取得する方法を教えてください10.625。の長さのアイテムの価格を取得するにはどうすればよい10.625ですか?


この問題をすでに解決したかどうかはわかりません

priceData.Length_End = Math.Ceiling(priceData.Length);

        string selectStatement = 
            "SELECT Price PriceList2 " +
            "WHERE @Length_End >= Length_Start AND @Length <= Length_End";

次に、最初のリーダーの値を取得します

SqlDataReader reader = selectCommand.ExecuteReader();
while (reader.Read())
{
   price = decimal.Parse(reader["Price_Per_Ton"].ToString());
   break;
}
reader.Close();

私が間違っていた場合は、私を修正してください。すべての応答に感謝します!

4

2 に答える 2

2

まあ、保存するだけで、クエリで列を取得したいときにLength使用できると思います。お気に入り;BETWEENPrice

Select Price
From YourTable
Where Length BETWEEN 11 AND 15

ここにありSQL Fiddle Demoます。

Lengthただし、この構造は、各範囲の最大値と最小値がわかっている場合にのみ問題ありません。それらをデータベースにも保存する場合は、列を2つの異なる列に分離する必要がありますLength。お気に入り;

Max_Length | Min_Length | Price
0          | 10         | 18
11         | 15         | 20 
16         | 20         | 30
21         | 40         | 45
41         |            | 60

Select Price
From YourTable
Where Min_Length < 10.625 AND Max_Length > 10.625
于 2013-04-17T05:34:16.727 に答える
2

構造を次のように変更できます。

len_start    len_end      price
0            10           18
11           15           20
16           20           30
21           40           45
41           infinity     60

次のようなクエリを実行します。

declare @len decimal
set @len= 10.615

select price from table
Where len_start <= @len and @len < len_end

NULL を無限として使用する場合は、次のクエリを実行します。

select price from table
Where (len_end is not null AND len_start <= @len and @len < len_end) OR 
      (len_end is null AND len_start <= @len)
于 2013-04-17T05:36:33.997 に答える