按警告SQL视图排序

时间:2017-07-29 04:12:16

标签: sql sql-server

我想合并来自不同表的数据。我跟踪物品价格,所以我有一个特定项目的价格条目。如果在价格表中未找到任何条目,则表示该项目是免费的。 使用Top 1Order by Id Desc来获取最后一个条目,认为它可以正常工作,但SQL会给我一个使用它的警告。

SELECT
(SELECT   TOP (1) CASE WHEN Price IS NULL THEN 0.0
                       ELSE Price END
 FROM  dbo.Prices
 WHERE (Id = table1.Id) AND (TableName = 'mytable')
 ORDER BY Id DESC) AS Price,

 (SELECT   TOP (1) CASE WHEN Price IS NULL OR DiscountPrice IS NULL THEN 0.0 
                        ELSE DiscountPrice END
  FROM dbo.Prices
  WHERE (Id = table1.Id) AND (TableName = 'mytable')
  ORDER BY Id DESC) AS Discount FROM dbo.MainTable as table1
  

'警告:ORDER BY子句仅用于确定视图定义中TOP子句返回的行。 ORDER BY子句不保证有序结果......'

预期结果是从另一个表中检索最后的价格和折扣号

1 个答案:

答案 0 :(得分:1)

使用聚合和子查询

像...一样的东西。

 Where Id = (select max(Id) from dbo.prices)