将列输出为来自不同 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
但是转换成int
比m.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;
目标是根据库存 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
但是转换成int
比m.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;