Moo*_*ons 6 sql sql-server-2008
我有一个问题,用户在表中设置了他的首选项.
该表有超过5列.现在我想用preference
表中的条件值搜索另一个视图.
例:
该Preference
表有price range
,colour
等
所以我需要搜索价格和颜色的产品.
现在我想在SQL Server本身中执行它,即传递首选项id,它将始终返回单行,然后从列中获取值min price
,max price
然后创建搜索查询.
问题是我不知道如何将偏好行列值存储在变量中以便我可以使用它.
我正在使用实体框架,所以我也不能使用动态SQL.
我只想知道我可以存储首选项表的列值的方式.
我只知道我可以这样做:
@colour = Select Top 1 Colour from preferences;
Run Code Online (Sandbox Code Playgroud)但是像这样我需要为每个变量编写这个查询.是否有更好的方法称为CTE等.
Thi*_* Oo 17
您必须声明变量,然后您可以使用它们来分配值并在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
Run Code Online (Sandbox Code Playgroud)
或者,如果这些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)
Run Code Online (Sandbox Code Playgroud)