Sql group by和order by的问题

Sql group by和order by的问题,sql,sql-server,Sql,Sql Server,您好,我是sql世界的新手,但正在努力让一些基础知识发挥作用 我有一组数据如下所示: Table name: Sample PROJECT WORK ORDER AMOUNT ----------------------------------------- 111 a 100 222 b 200 111 c

您好,我是sql世界的新手,但正在努力让一些基础知识发挥作用

我有一组数据如下所示:

Table name: Sample
    PROJECT      WORK ORDER      AMOUNT
     -----------------------------------------
     111             a             100
     222             b             200
     111             c             300
     444             d             400
     111             e             500
     666             f             600
Table name: Sample
    PROJECT      WORK ORDER      AMOUNT     PROJECT AMOUNT
     --------------------------------------------------------
     111             e             500           900
     111             c             300           900
     111             a             100           900
     666             f             600           600
     444             d             400           600
     222             b             200           200
我希望它最终看起来像这样:

Table name: Sample
    PROJECT      WORK ORDER      AMOUNT
     -----------------------------------------
     111             a             100
     222             b             200
     111             c             300
     444             d             400
     111             e             500
     666             f             600
Table name: Sample
    PROJECT      WORK ORDER      AMOUNT     PROJECT AMOUNT
     --------------------------------------------------------
     111             e             500           900
     111             c             300           900
     111             a             100           900
     666             f             600           600
     444             d             400           600
     222             b             200           200
按总金额最大的项目排序

GROUPBY不适用于我,因为它将所有项目分组为一个,所以我看不到项目111的3个工作订单行

PROJECT      WORK ORDER      AMOUNT
 -----------------------------------------
 111             a             900
 222             b             200
 444             d             400
 666             f             600
Order by不起作用,因为我无法根据最大的项目价值进行排序

Table name: Sample
    PROJECT      WORK ORDER      AMOUNT
     -----------------------------------------
     666             f             600
     111             e             500
     444             d             400
     111             c             300
     222             b             200
     111             a             100
我的另一个想法是,如果我可以创建另一列“项目金额”,根据“项目”列中的值计算项目总额,然后我可以轻松地按项目金额对其进行排序,以获得所需的格式

Table name: Sample
    PROJECT      WORK ORDER      AMOUNT     PROJECT AMOUNT
     --------------------------------------------------------
     111             e             500           900
     111             c             300           900
     111             a             100           900
     666             f             600           600
     444             d             400           600
     222             b             200           200
但是,我正在努力获取“项目数量”列,以计算所有项目的总价值,并将它们显示在具有相同项目编号的任何行上

有什么建议吗

select  *
,       sum(amount) over (partition by project) as ProjAmount
,       row_number() over 
from    YourTable
order by
        ProjAmount desc
要仅选择金额最高的前两个项目,可以使用dense_rank:


具有普通SQL子查询的版本

SELECT s.*,
       (SELECT SUM(Amount) FROM Sample WHERE Project = s.Project) ProjectAmount
  FROM Sample s
 ORDER BY ProjectAmount DESC

谢谢你的帮助,我想我已经尝试了一千种正确的方法,而且在正确的代码中,我认为有人告诉我他们将如何做会更容易。我认为下面的代码刚刚解决了这个问题。谢谢,我花了将近两周的时间尝试了所有不同类型的代码,但我确实做到了,而且效果非常好。最后一件事,如果你不介意,我将如何选择前2名。例如,为了只显示两个最大的项目数量,所有的111和所有的666?这需要从我这边对表进行大量调整,我正在使用的实际代码有大约10列,连接到7个表和更多,但非常感谢,我已经让它工作了,非常感谢。在根据ProjAmount排序后,我如何添加第二个订单?在您的第一个代码中,我在projamount desc之后添加了金额,并且成功了。我在您的第二个代码中添加了它,它将结果集减少到前2个项目,而不是前2个项目。结果集总是在外部查询的末尾按顺序排序。更新答案。你的a星,对不起,我看了密集等级代码中的排序依据,认为它需要去那里,因为结果已经按正确的projamount顺序排序,所以认为需要在那里输入,但是你的权利,很好:我需要做些什么来投票支持你的帮助,或者勾选足够了吗?再次感谢Hanks的帮助,上面的代码已经开始工作了,现在只看如何选择前2个项目金额。这个社区很棒,第一次使用这个网站