группа с где не работает - PullRequest
       16

группа с где не работает

0 голосов
/ 21 августа 2011
SELECT A.ID, A.COLUMN_B, A.COLUMN_C FROM A
WHERE A.COLUMN_A IN
 (
  SELECT A.COLUMN_A
  FROM B
  INNER JOIN A ON B."COLUMN_A" = A."COLUMN_A"
  WHERE B."COLUMN_B" = 'something'

  UNION

  SELECT A."COLUMN_A"
  FROM A  
  WHERE A."COLUMN_D" IN (X,Y,Z) OR A."COLUMN_D" = 'something'
  )

Теперь я хочу добавить group by (A.ID), order by (A.COLUMN_B) DESC, а затем select first к нему.Но БД не позволит.Какие-либо предложения ?Я могу использовать LINQ, чтобы решить эту проблему, как только будет возвращена внутренняя часть Union.Но теперь хочу идти по этому пути.

Ответы [ 3 ]

1 голос
/ 23 августа 2011

Здесь есть пара вещей.
Прежде всего - в DB2 при использовании GROUP BY вы можете выбрать только те столбцы, которые перечислены в операторе группировки - все остальное должно быть частью функции агрегирования. Таким образом, группировка по a.Id и упорядочение по a.Column_B не будут работать - вам нужно будет заказать по SUM(a.Column_B) или что-то еще применимо.
Во-вторых ... ваш запрос может использовать немного работы в общем смысле - в частности, вы дважды присоединяетесь к себе, что вам вообще не нужно делать. Попробуйте вместо этого:

SELECT a.Id, SUM(a.Column_B) as total, SUM(a.Column_C)
FROM a
WHERE a.Column_D in (X, Y, Z, 'Something')
OR EXISTS (SELECT '1'
           FROM b
           WHERE b.Column_A = a.Column_A
           AND b.Column_B = 'Something')
GROUP BY a.Id
ORDER BY total DESC
FETCH FIRST 1 ROW ONLY

Замените функцию SUM на все, что подходит.

0 голосов
/ 23 августа 2011

Работал в другом направлении.Просто используйте Order By на A.ID и выберите строку с максимальным идентификатором столбца.

0 голосов
/ 21 августа 2011

Вы не можете использовать столбец в ORDER BY или SELECT, который вы не включили в GROUP BY, если только он не агрегируется (в функции, такой как MAX () или COUNT () или SUM ().

Итак, вы можете GROUP BY A.ID, A.COLUMN_B, а затем ORDER BY COLUMN_B. Использование TOP 1 также должно работать.

Я только что заметил, что вы находитесь на DB2. Я знаю, что так будет работать на SQLServer. DB2 должна быть похожей.

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