4

こんにちは、私は 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

TOTAL金額が多い案件順

グループ化はすべてのプロジェクトを 1 つにグループ化するため機能しません。そのため、「プロジェクト 111」の 3 つの作業指示書が表示されません。

PROJECT      WORK ORDER      AMOUNT
 -----------------------------------------
 111             a             900
 222             b             200
 444             d             400
 666             f             600

最大のプロジェクト値に基づいて並べ替えることができないため、順序付けは機能しません

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

しかし、列「プロジェクト金額」を取得してすべてのプロジェクトの合計値を計算し、同じプロジェクト番号で表示される行にそれらを表示する方法に苦労しています。

何かアドバイスはありますか?

4

3 に答える 3

4
select  *
,       sum(amount) over (partition by project) as ProjAmount
,       row_number() over 
from    YourTable
order by
        ProjAmount desc

SQL Fiddle の例。


金額が最も高い上位 2 つのプロジェクトのみを選択するには、次を使用できますdense_rank

select  *
from    (
        select  *
        ,       dense_rank() over (order by ProjAmount desc) as dr
        from    (
                select  *
                ,       sum(amount) over (partition by project) as ProjAmount
                from    YourTable
                ) WithProjAmount
        ) WithDenseRank
where   dr < 3
order by
        ProjAmount desc

SQL Fiddle の例。

于 2013-05-21T09:44:52.533 に答える
1

プレーンな SQL サブクエリを使用したバージョン

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

SQLフィドル

于 2013-05-21T09:46:40.193 に答える
0
SELECT  a.project ,
        a.work  ,
        a.amount ,
        b.proj_amount
FROM    project A
        JOIN ( SELECT   SUM(amount) proj_amount ,
                        project
               FROM     project
               WHERE    project = project
               GROUP BY project
             ) b ON a.project = b.project
ORDER BY proj_amount DESC ,
        amount DESC
于 2013-05-21T12:09:23.687 に答える