ROW_NUMBER()ORDER BY,不能在同一SELECT语句中使用列

卡尔·布鲁克斯

我下面有一个调用视图以创建联赛表的过程:

CREATE PROCEDURE [dbo].[League_Table_Insert]
    @LeagueName VARCHAR(30)
AS
SET NOCOUNT ON
BEGIN

    DECLARE @LeagueID INT

    SELECT 
    @LeagueID = LeagueID FROM dbo.League
    WHERE LeagueName = @LeagueName

    SELECT [TeamName], [Played], [Wins], [Loss], [Draws], [Points], [Goals_Scored], [Goals_Against], [Goal_Difference]  
    FROM League_Table
    WHERE LeagueID = @LeagueID
    ORDER BY Points DESC, Goal_Difference DESC;

END

看法:

CREATE VIEW League_Table
    AS
    SELECT f.LeagueID, t.TeamName, 
    SUM(
        CASE WHEN f.HomeScore IS NOT NULL THEN 1 ELSE 0 END
    ) AS Played,
        SUM(
        CASE        
            WHEN t.TeamID = f.HomeTeamID THEN
                --Home Fixture
                CASE
                 WHEN f.HomeScore > f.AwayScore THEN 1 
                 ELSE 0
                 END
            WHEN t.TeamID = f.AwayTeamID THEN
                CASE
                 WHEN f.AwayScore > f.HomeScore THEN 1
                 ELSE 0 
                 END
        END
        ) AS Wins, 
            SUM(
        CASE        
            WHEN t.TeamID = f.HomeTeamID THEN
                --Home Fixture
                CASE
                 WHEN f.HomeScore < f.AwayScore THEN 1 
                 ELSE 0
                 END
            WHEN t.TeamID = f.AwayTeamID THEN
                CASE
                 WHEN f.AwayScore < f.HomeScore THEN 1 
                 ELSE 0
                 END
        END
        ) AS Loss, 
        SUM(CASE WHEN f.HomeScore = f.AwayScore THEN 1 ELSE 0 END) as Draws, 
        SUM(
        CASE 
            WHEN t.TeamID = f.AwayTeamID THEN
                --Away Fixture
                CASE
                    WHEN f.AwayScore > f.HomeScore THEN 3
                    WHEN f.AwayScore = f.HomeScore THEN 1
                    ELSE 0
                END
            WHEN t.TeamID = f.HomeTeamID THEN
                --Home Fixture
                CASE
                    WHEN f.HomeScore > f.AwayScore THEN 3 
                    WHEN f.HomeScore = f.AwayScore THEN 1
                    ELSE 0
                END
        END
    ) AS Points, 
        SUM(
        CASE
            WHEN t.TeamID = f.HomeTeamID THEN f.HomeScore
            -- Home Fixture
            WHEN t.TeamID = f.AwayTeamID THEN f.AwayScore
            -- Away Fixture
            END
            ) AS Goals_Scored,

        SUM(
        CASE
            WHEN t.TeamID = f.HomeTeamID THEN f.AwayScore
            -- Home Fixture
            WHEN t.TeamID = f.AwayTeamID THEN HomeScore
            -- Away Fixture
            END
            ) AS Goals_Against,
         SUM(
          CASE
          WHEN t.TeamID = f.HomeTeamID THEN       
              CASE
              WHEN f.HomeScore IS NOT NULL THEN f.HomeScore - f.AwayScore
          -- Home Fixture
              END
          WHEN t.TeamID = f.AwayTeamID THEN 
              CASE
              WHEN f.AwayScore IS NOT NULL THEN f.AwayScore - f.HomeScore
          -- Away Fixture
              END
          END
        ) AS Goal_Difference
    FROM dbo.Team t
    --Season TBC
    INNER JOIN dbo.Fixture f ON t.TeamID IN (f.HomeTeamID, f.AwayTeamID)
    GROUP BY f.LeagueID, t.TeamName

下面是它的输出:

在此处输入图片说明

我想在视图中包括另一个字段,其中将包含每个团队的联赛排名。我的问题是使用ROW_NUMBER时的ORDER BY,因为我不确定将其设置为什么,因为我无法在同一SELECT语句中使用它来将其设置为“ Points DESC”和“ Goal_Difference DESC”创造它。我的问题是在以下代码中将ORDER BY设置为什么才能输出正确的联赛排名?

ROW_NUMBER() OVER (PARTITION BY LeagueID ORDER BY ...)  AS Position,
托斯滕·凯特纳

最简单的方法可能是子查询(派生表):

CREATE VIEW League_Table AS
select 
  data.*, 
  row_number() over (partition by leagueid 
                     order by points desc, goal_difference desc) as position,
from
(
  SELECT f.LeagueID, t.TeamName, 
  SUM(
      CASE WHEN f.HomeScore IS NOT NULL THEN 1 ELSE 0 END
     ) AS Played,
  SUM(
  ...
  GROUP BY f.LeagueID, t.TeamName
) data

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ROW_NUMBER()OVER(ORDER BY(SELECT NULL))是否保留顺序?

来自分类Dev

使用ORDER BY代替PARTION BY row_number()。over()

来自分类Dev

在更新语句中使用Row_Number()

来自分类Dev

如何在UPDATE子句中使用ROW_NUMBER()?

来自分类Dev

在 SQL Server 的 WHERE 子句中使用 ROW_NUMBER()

来自分类Dev

如果我不能在 WHERE 中使用 ROW_NUMBER(),如何找到重复的行?

来自分类Dev

1250-SELECT之一中的表'sub'不能在全局ORDER子句中使用

来自分类Dev

在SQL Server中的case语句中使用Row_Number()

来自分类Dev

distinct和row_number不能一起使用

来自分类Dev

使用日期索引优化ROW_NUMBER()

来自分类Dev

如何正确使用Row_Number()

来自分类Dev

ROW_NUMBER()OVER(PARTITION BY ...)使用麻烦

来自分类Dev

使用日期索引优化ROW_NUMBER()

来自分类Dev

LINQ使用ROW_NUMBER()函数吗?

来自分类Dev

如何在SQL中使用ROW_NUMBER()更新列

来自分类Dev

而不是 ROW_NUMBER ORDER BY

来自分类Dev

如何在不使用ROW_NUMBER()的情况下模仿ROW_NUMBER()功能?

来自分类Dev

在PostgreSQL中使用row_number()进行数据透视

来自分类Dev

如何在SQLite中使用ROW_NUMBER()?

来自分类Dev

在 mutate dplyr 中使用 row_number() 作为列表索引

来自分类Dev

在子查询中使用 ROW_NUMBER() OVER()

来自分类Dev

根据row_number()更新一列

来自分类Dev

使用ROW_NUMBER函数选择最后一行

来自分类Dev

将ROW_NUMBER()与聚合函数一起使用

来自分类Dev

使用没有唯一键的row_number

来自分类Dev

sql case语句和等价row_number的SPARK代码

来自分类Dev

在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

来自分类Dev

在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

来自分类Dev

在Oracle中SELECT *,ROW_NUMBER()个以上

Related 相关文章

  1. 1

    ROW_NUMBER()OVER(ORDER BY(SELECT NULL))是否保留顺序?

  2. 2

    使用ORDER BY代替PARTION BY row_number()。over()

  3. 3

    在更新语句中使用Row_Number()

  4. 4

    如何在UPDATE子句中使用ROW_NUMBER()?

  5. 5

    在 SQL Server 的 WHERE 子句中使用 ROW_NUMBER()

  6. 6

    如果我不能在 WHERE 中使用 ROW_NUMBER(),如何找到重复的行?

  7. 7

    1250-SELECT之一中的表'sub'不能在全局ORDER子句中使用

  8. 8

    在SQL Server中的case语句中使用Row_Number()

  9. 9

    distinct和row_number不能一起使用

  10. 10

    使用日期索引优化ROW_NUMBER()

  11. 11

    如何正确使用Row_Number()

  12. 12

    ROW_NUMBER()OVER(PARTITION BY ...)使用麻烦

  13. 13

    使用日期索引优化ROW_NUMBER()

  14. 14

    LINQ使用ROW_NUMBER()函数吗?

  15. 15

    如何在SQL中使用ROW_NUMBER()更新列

  16. 16

    而不是 ROW_NUMBER ORDER BY

  17. 17

    如何在不使用ROW_NUMBER()的情况下模仿ROW_NUMBER()功能?

  18. 18

    在PostgreSQL中使用row_number()进行数据透视

  19. 19

    如何在SQLite中使用ROW_NUMBER()?

  20. 20

    在 mutate dplyr 中使用 row_number() 作为列表索引

  21. 21

    在子查询中使用 ROW_NUMBER() OVER()

  22. 22

    根据row_number()更新一列

  23. 23

    使用ROW_NUMBER函数选择最后一行

  24. 24

    将ROW_NUMBER()与聚合函数一起使用

  25. 25

    使用没有唯一键的row_number

  26. 26

    sql case语句和等价row_number的SPARK代码

  27. 27

    在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

  28. 28

    在where子句中使用ROW_NUMBER()OVER(PARTITION BY ...)选择stmt

  29. 29

    在Oracle中SELECT *,ROW_NUMBER()个以上

热门标签

归档