t sql按计算列

时间:2016-01-12 19:22:20

标签: sql-server sorting sql-order-by sql-server-2014

我正在使用T-SQL 2014并尝试按其价格订购产品。现在问题在于:价格是计算字段。例如。我创建了一个函数来评估一些定价规则(可能大约有4个表,每个表约4,000,000条记录与JOIN相结合以适应当前登录)并返回产品的用户价格。虽然如果我只是想为有限数量的产品返回价格,这是可以的,但如果我想按此排序,那就慢了。

我正在考虑使用像UserProductPrice这样的附加表,它将在后台计算,但显然并不总是具有正确的价格,因为规则等可能会在计算之间发生变化。

关于如何按价格排序的任何建议都将非常受欢迎。

1 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER()函数并将其放入临时表:

SELECT
Product,
dbo.ufnPrice(Price) as Price,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY dbo.ufnPrice(Price) DESC) AS Ranking
INTO #Products
FROM dbo.Products

SELECT
Product,
Price,
FROM #Products
WHERE Ranking = 1

DROP TABLE #Products

应该给你你需要的东西。