Простой запрос в DB2 для AS400 - PullRequest
2 голосов
/ 01 марта 2010

Это очень простой запрос (я думаю), но я все еще не могу его сделать.

У меня есть такие данные:

A          B        C
1        1100       5  
1        1100       5
1         500       1
2        1200       4
2        1200       4
2         600       1
3        1300       3
3        1300       3
3         700       1

И я хочу вернуть верхнюю точку B в каждой с суммой C, или что-то вроде этого:

A     B    C
1   1100   10
2   1200   8
3   1300   6

Кроме того, я использую DB2 для AS400, поэтому не могу использовать ключевое слово TOP.

РЕДАКТИРОВАТЬ @ OMG Пони:

Я пробовал что-то вроде

SELECT
   t.A
   ,MAX(t.B)
   ,SUM(t.C)
FROM t
GROUP BY
   t.A

Но он возвращает общую сумму C, а не только выбранные:

A    B    C
1   1100  11
2   1200  9
3   1300  7

Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 марта 2010

Похоже, вам нужно максимальное значение B для каждого значения A, поэтому

  SELECT t.a,
         MAX(t.b)
    FROM TABLE t
GROUP BY t.a

Если вы хотите, чтобы вся запись была связана со значениями A и MAX(b), используйте:

SELECT t.a,
       t.b,
       t.c
  FROM TABLE t
  JOIN (SELECT x.a,
               MAX(x.b) AS max_b
          FROM TABLE x
      GROUP BY x.a) y ON y.a = t.a
                     AND y.max_b = t.b
2 голосов
/ 01 марта 2010

В DB2 вы можете использовать FETCH FIRST # ROWS ONLY имитировать предикат TOP, но он идет в конце оператора SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...