【发布时间】:2021-07-08 14:05:43
【问题描述】:
目标是根据 Inventory 表中的数量对 Movies 表进行排名,以便对于每个重复值,它会跳过后续值,以便下一个非重复值保持在其应有的位置。显示 MovieID、最新标题、价格和排名。
而电影表中的MovieId“1”对应于电影库存表中的MovieId“101”,依此类推。
这些是表格
电影
| MovieId | latest title | Price |
|---|---|---|
| 1 | Breaking Dawn | 200.00 |
| 2 | The Proposal | 185.00 |
| 3 | Iron Man 2 | 180.00 |
| 4 | Up | 180.00 |
| 5 | The Karate Kid | 190.00 |
| 6 | How to train your Dragon | 190.00 |
| 7 | Spiderman 3 | 195.00 |
电影库存
| MovieId | Quantity |
|---|---|
| 101 | 3 |
| 105 | 4 |
| 107 | 5 |
| 108 | 7 |
| 110 | 8 |
| 111 | 4 |
这是我对显示大量 NULL 的代码的尝试
SELECT CASE
WHEN Movies.MovieId + 100 = MovieInventory.MovieID
THEN CAST(MovieInventory.MovieID AS INT)
END AS 'MovieId',
Movies.LatestTitle, Movies.Price,
DENSE_RANK() OVER (ORDER BY Movies.MovieId DESC) AS [Rank]
FROM Movies, MovieInventory WHERE MovieInventory.MovieID IS NOT NULL
GO
【问题讨论】:
-
进化!没有人应该使用old-style joins。这是意外交叉连接造成的问题的一个很好的例子。
标签: sql-server sql-server-2012