将列输出为来自不同 table 的不同数字

Outputting a column as a different number from a different table

目标是根据库存 table 中的数量对电影 table 进行排名,这样对于每个重复值,它都会跳过后续值,以便下一个 non-duplicate 值保持在其应有的位置。显示电影 ID、最新标题、价格和排名。

虽然电影 table 中的 MovieId ‘1’ 对应于您的电影库存的 MovieId ‘101’ table 等等。

这些是 table

电影

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

这就是您所需要的。

备注:

  • 你需要 RANK 而不是 DENSE_RANK 来达到你想要的结果
  • 您需要在Quantity
  • 前下单
  • 使用正确的 JOIN 语法,而不是逗号 , 连接
  • 使用 table 别名以获得更好的可读性
  • 外键和主键关系很奇怪:mi.MovieID看起来是varchar但是转换成intm.MovieID多了100???
  • SELECT 中的计算无法满足 JOIN 条件
  • 不要使用撇号 '' 来引用列名
SELECT
    mi.MovieId,
    m.LatestTitle,
    m.Price,
    RANK() OVER (ORDER BY mi.Quantity DESC) AS [Rank]
FROM Movies m
JOIN MovieInventory mi ON TRY_CAST(mi.MovieID AS int) = m.MovieID + 100;