1

テーブル:

Value | Win
 12      3
 22      4
 44      5
 12      11

現時点で取得sum(Win)して注文するValueと、戻ります。したがって、すべてが価値で勝ちます。

Value | Win
 12      14
 22      4
 44      5

で注文するだけではなく、次Valueのようにしたい:

値が 10、20、30、40 より大きいすべての賞金を返します。

したがって、戻り値は次のようになります。

Value | Win
 10+      23
 20+      9
 30+      5
 40+      5

これは可能ですか?提案?

4

3 に答える 3

2

グループ化テーブルには、次のような利点があります。

グループテーブル

これにより、以下を構築できます。

グループテーブル2

使用:

SELECT Groups.GroupName, ta.Value
FROM Groups, ta
WHERE ta.Value Between [low] And [high]

あるいは

WHERE ta.Value >= [low] 

そして、次のように仕上げます。

SELECT GroupName, Count([Value]) , Sum(Win)
FROM (SELECT Groups.GroupName, ta.Value, ta.Win
FROM Groups, ta
WHERE ta.Value >= [low]) q
GROUP BY GroupName

1つの利点は、テーブルを編集することでグループを非常に簡単に追加および削除できることです。

于 2013-01-13T17:17:48.723 に答える
2
SELECT '10+' AS v,
SUM(IIF (myvalue>10, win)) AS w
FROM mytable

UNION ALL

SELECT '20+' AS v,
SUM(IIF (myvalue>20, win)) AS w
FROM mytable

UNION ALL

SELECT '30+' AS v,
SUM(IIF (myvalue>30, win)) AS w
FROM mytable

UNION ALL

SELECT '40+' AS v,
SUM(IIF (myvalue>40, win)) AS w
FROM mytable

:私が使用したフィールド名は、質問で使用された名前とは少し異なります...

于 2013-01-13T17:35:02.737 に答える
1

ほとんどのデータベースでは、case ステートメントを使用します。

select (case when value >= 40 then '40+'
             when value >= 30 then '30+'
             when value >= 20 then '20+'
             when value > 10 then '10+'
         end)

残念ながら、MS-Access はこのケースをサポートしていないため、iif代わりに次を使用する必要があります。

最も簡単な方法は、式をサブクエリに入れることです。

select valuegroup, sum(win)
from (select t.*,
             iif(value > 40, '40+',
                 iif(value > 30, '30+',
                     iif(value > 20, '20+',
                         iif(value > 10, '10+', '<10'
                 )))) as valuegroup
      from t
     ) t
group by valuegroup

現在の合計を取得するには、自己結合を行う必要があります。ばかげていますが、Access にはウィンドウ関数がありません。

select valuegroup, sum(cumwin)
from (select t.*, sum(t2.win) as cumwin,
             iif(t.value > 40, '40+',
                 iift.(value > 30, '30+',
                     iif(t.value > 20, '20+',
                         iif(t.value > 10, '10+', '<10'
                 )))) as valuegroup
      from t join
           t t2
           on t.value <= t2.value
      group by t.value
     ) t
group by valuegroup

MS Accessで外側のクエリを入力できない場合は、式全体を入力する必要がありますvaluegroupgroup by

于 2013-01-13T16:25:12.463 に答える