我正试图根据列SalesAmount
中的数量创建一个SalesRank
列。
我正在尝试做类似的事情:RANK() OVER(Order BY SalesAmount desc) as StateRank
,但我不确定在将两个表连接在一起后如何执行它?如何在两个表的并集之后创建另一列?为了做到这一点,我需要将我的并集选择插入到#temptable
中吗?
以下是我的表格示例:
StateId | ReportTitle | ReportId销售额 | |
---|---|---|---|
1 | 加利福尼亚州的在线销售 | 21 | 2512|
12 | 纽约在线销售 | 37 | 13201|
14 | 密歇根州的在线销售 | 91 | >9212 |
23 | 内华达州的在线销售 | 14 | 12931|
8 | 宾夕法尼亚州的在线销售 | 14 | 223413 |
13 | 俄勒冈州的在线销售 | 149651 |
您就快到了。
SELECT *
,RANK() OVER (ORDER BY SalesAmount DESC) AS RowRank
FROM (
SELECT *
FROM TableOne
UNION ALL
SELECT *
FROM TableTwo
) AS t;
或者您可以使用Common Table Expression(在这种情况下,这只是编写子查询的一种更简洁/不同的方式,但在其他情况下确实提供了更多好处(。
WITH cte AS (
SELECT *
FROM TableOne
UNION ALL
SELECT *
FROM TableTwo
)
SELECT *
, RANK() OVER (ORDER BY SalesAmount DESC) AS RowRank
FROM cte;