2012-02-07 21 views
4

我遇到了用戶在表中設置其偏好的問題。將單個sql服務器行存儲在變量中,然後使用列值構建查詢

該表格有5列以上。現在我想使用preference表中的條件值搜索另一個視圖。

例子:

Preference表有price rangecolour

所以我需要尋找具有價格和顏色的產品。

現在我想在SQL Server本身做到這一點,即傳遞首選項ID,它將始終返回一行,然後從列中獲取值如min pricemax price,然後創建一個搜索查詢。

問題是我不知道如何將偏好行列值存儲在變量中,以便我可以使用它。

我正在使用實體框架,因此我也無法使用動態SQL。

我只想知道我可以存儲偏好表的列值的方式。

  • 我只知道我能做到這一點是這樣的:

    @colour = Select Top 1 Colour from preferences; 
    

但這樣的我需要寫這個查詢每個變量。是否有與一些所謂的CTE等一些更好的辦法

回答

16

您必須聲明變量,那麼你可以使用它們來分配在SELECT值並在以後使用它們:

-- 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 2012-02-07 07:27:02

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

不是簡單地發佈一些代碼,而是解釋這個問題是如何回答問題的,以及它是如何工作的。 – 2015-05-16 02:12:32

相關問題