2012-02-07 6 views
4

ユーザーが自分の環境設定をテーブルに設定したときに問題が発生しました。変数に1つのSQL Server行を格納してから、列の値を使用してクエリを作成します。

表には5つ以上の列があります。今度は、preferenceテーブルにある条件値を使って他のビューを検索したいと思います。

例:

Preferenceの表は、だから私は価格と色で製品を検索する必要がprice rangecolourなど

を持っています。

今私は、すなわち好みIDを渡すのSQL Server自体にそれをしたい、それは常に単一の行を返し、その後、列から、その後min pricemax priceなどの値は、検索クエリを作成します。

問題は、私がそれを使用できるように変数に優先行の列の値をどのように格納できるのか分かりません。

私はEntity Frameworkを使用しているため、動的SQLも使用できません。

私は好みの表の列の値を格納できる方法を知りたいだけです。

@colour = Select Top 1 Colour from preferences; 

をしかし、このように私はすべての変数のために、このクエリを記述する必要があります。

  • は私だけ私はそれが何かのように行うことができることを知っています。あなたは、あなたがSELECTに値を代入し、後でそれらを使用するためにそれらを使用することができ、変数を宣言する必要がCTEと呼ばれるもので、いくつかのより良い方法がなどがあり

答えて

16

です:

-- declare the variables 
DECLARE @min_price decimal(8,2) 
DECLARE @max_price decimal(8,2) 
DECLARE @color varchar(20) 

-- assign the values into the variables 
SELECT 
    @min_price = MIN_PRICE 
    , @max_price = MAX_PRICE 
    , @color = Colour 
FROM Preference 
WHERE preference_id = (parameter of prefrence id) 

-- Now you get all 3 values of Colour, Min Price, Max Price, 
-- then these 3 values can be used for your query 

SELECT * 
FROM products 
WHERE colour = @color 
    AND price BETWEEN min_price AND @max_price 

それとも、これらの3つの変数が他の場所で使用されていない場合は、単一のクエリを行うことができます。

SELECT * 
FROM products p 
INNER JOIN 
(
    SELECT Colour, MIN_PRICE, MAX_PRICE 
    FROM Preference 
    WHERE preference_id = (parameter of prefrence id) 
) pre ON (p.colour = pre.Colour AND p.price BETWEEN pre.MIN_PRICE AND pre.MAX_PRICE) 
+0

ありがとう、素晴らしい仕事 – Moons

0
DECLARE @A int, @B int 

SELECT 
    @A = Col1, 
    @B = Col2 
FROM SomeTable 
WHERE ... 

または

DECLARE @T TABLE (
    A int, 
    B int 
) 
INSERT INTO @T (A, B) 
SELECT 
    Col1, 
    Col2 
FROM SomeTable 
WHERE ... 
+1

単にコードを投稿するのではなく、これがどのように質問に答えるのか、なぜそれがうまくいくのかを説明することは良いことです。 –

関連する問題