2017-11-30 14 views
4

以下のデータについてはAverageOfTotalで注文し、平均の合計がxまでのトップItemNumbersを取得します。例えば次の順に並べ替えます。Sum()はxまで返されます。

ItemNumber AverageOfTotal 
item-1 0.0235 
item-2 0.0149 
item-3 0.0203 
item-4 0.0101 
item-5 0.0084 
item-6 0.0096 
item-7 0.0092 
item-8 0.0062 
item-9 0.0069 
item-10 0.0084 
item-11 0.0132 
item-12 0.0058 
item-13 0.0094 
item-14 0.0028 
item-15 0.0061 
item-16 0.0047 
item-17 0.0038 
item-18 0.0021 
item-19 0.004 
item-20 0.0083 
item-21 0.0048 
item-22 0.0058 
item-23 0.0153 
item-24 0.0025 
item-25 0.0022 
item-26 0.0086 
item-27 0.0076 
item-28 0.0097 
item-29 0.0009 
item-30 0.0042 
item-31 0.0099 
item-32 0.0036 

私はそれが戻ってくるだけトップ.1 ItemNumbersしたい場合

項目3項目23項目2項目11項目4項目31

   How do i get this column(sum of avg) 

item-1 0.0235 0.0235 
item-3 0.0203 0.0438 
item-23 0.0153 0.0591 
item-2 0.0149 0.074 
item-11 0.0132 0.0872 
item-4 0.0101 0.0973 
item-31 0.0099 0.1072 
item-28 0.0097 0.1169 
item-6 0.0096 0.1265 
item-13 0.0094 0.1359 
item-7 0.0092 0.1451 
item-26 0.0086 0.1537 
item-5 0.0084 0.1621 
item-10 0.0084 0.1705 
item-20 0.0083 0.1788 
item-27 0.0076 0.1864 
item-9 0.0069 0.1933 
item-8 0.0062 0.1995 
item-15 0.0061 0.2056 
item-12 0.0058 0.2114 
item-22 0.0058 0.2172 
item-21 0.0048 0.222 
item-16 0.0047 0.2267 
item-30 0.0042 0.2309 
item-19 0.004 0.2349 
item-17 0.0038 0.2387 
item-32 0.0036 0.2423 
item-14 0.0028 0.2451 
item-24 0.0025 0.2476 
item-25 0.0022 0.2498 
item-18 0.0021 0.2519 
item-29 0.0009 0.2528 

目標:

がどのように私はその列メントを生成します上のイオン?キーはまず、AverageOfTotalで注文する必要があります。また、数値までの行から行への値の合計は、それらのアイテムを返します。

あなたが新しいSQLサーバのバージョンは、私がrunning_tally機能のようなものを考えている

Select 
    ItemNumber, 
    AverageOfTotal, 
    (
     select sum(AverageOfTotal) 
     from tbl 
     where AverageOfTotal >= yt.AverageOfTotal 
    ) as summedAvgBiggerEqualThisOne 
from tbl yt 
where 
    (
     select sum(AverageOfTotal) 
     from tbl 
     where AverageOfTotal >= yt.AverageOfTotal 
    ) < 0.1 

order by AverageOfTotal desc 

に似て何かを (あなたは例のように製造番号からguesstimateを)見ているかもしれない

+0

項目は、その 'AverageOfTotal'、「合計によって降順並べられ"彼は、より大きな(そしておそらくは等しい)' AverageOfTotal'とそれ自身を持つアイテムのすべての 'AverageOfTotal'の合計を求めています –

答えて

1

これはそれを行うだろう。

SELECT 
    ItemNumber 
    , AverageOfTotal 
    , SumOfAverageOfTotal 
FROM 
    (
     SELECT 
      ItemNumber 
      , AverageOfTotal 
      , SUM(AverageOfTotal) OVER (ORDER BY AverageOfTotal DESC) SumOfAverageOfTotal 
     FROM YourTable 
    ) Q 
WHERE SumOfAverageOfTotal < 0.1 -- or <= 
2

- まだそれで遊んでいません - よりスマートに見える(see Chris Macks answer)。

インスピレーションのため、ここに:Calculate a Running Total in SQL Server

DDL:

CREATE TABLE tbl (ItemNumber varchar(7), AverageOfTotal decimal(6,6)); 

INSERT INTO tbl (ItemNumber , AverageOfTotal) 
    VALUES 
     ('item-1', 0.0235), ('item-2', 0.0149), ('item-3', 0.0203),  ('item-4', 0.0101), 
     ('item-5', 0.0084), ('item-6', 0.0096), ('item-7', 0.0092),  ('item-8', 0.0062), 
     ('item-9', 0.0069), ('item-10', 0.0084), ('item-11', 0.0132), ('item-12', 0.0058), 
     ('item-13', 0.0094), ('item-14', 0.0028), ('item-15', 0.0061), ('item-16', 0.0047), 
     ('item-17', 0.0038), ('item-18', 0.0021), ('item-19', 0.004),  ('item-20', 0.0083), 
     ('item-21', 0.0048), ('item-22', 0.0058), ('item-23', 0.0153), ('item-24', 0.0025), 
     ('item-25', 0.0022), ('item-26', 0.0086), ('item-27', 0.0076), ('item-28', 0.0097), 
     ('item-29', 0.0009), ('item-30', 0.0042), ('item-31', 0.0099), ('item-32', 0.0036) 
    ; 

結果:

ItemNumber AverageOfTotal summedAvgBiggerEqualThisOne 
item-1  0.0235   0.0235 
item-3  0.0203   0.0438 
item-23 0.0153   0.0591 
item-2  0.0149   0.074 
item-11 0.0132   0.0872 
item-4  0.0101   0.0973 
関連する問題