Как получить оригинальные строки, отфильтрованные по условию HAVING? - PullRequest
3 голосов
/ 30 декабря 2011

Какой метод используется в T-SQL для выбора оригинальных значений, ограниченных атрибутом HAVING. Например, если у меня есть

A|B
10|1
11|2
10|3

Как бы я получить все значения B (не среднего или какого-либо другого сводного показателя), сгруппированные по A, с числом (появлением A), большим или равным двум 2?

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

На самом деле, у вас есть несколько вариантов на выбор

1.Вы можете сделать подзапрос из своего исходного заявления и присоединить его к таблице

SELECT *
FROM   YourTable yt
       INNER JOIN (
         SELECT A
         FROM   YourTable
         GROUP BY
                A
         HAVING COUNT(*) >= 2
       ) cnt ON cnt.A = yt.A

2.другим эквивалентным решением было бы использование предложения WITH

  ;WITH cnt AS (
    SELECT A
    FROM   YourTable
    GROUP BY
           A
    HAVING COUNT(*) >= 2
  )
      SELECT *
      FROM   YourTable yt
             INNER JOIN cnt ON cnt.A = yt.A

3.или вы можете использовать оператор IN

      SELECT *
      FROM   YourTable yt
      WHERE  A IN (SELECT A FROM YourTable GROUP BY A HAVING COUNT(*) >= 2)
2 голосов
/ 30 декабря 2011

Самостоятельное объединение будет работать:

select B
from table
join(
  select A
  from table
  group by 1
  having count(1)>1
)s
using(A);
1 голос
/ 30 декабря 2011

Вы можете использовать оконную функцию (без объединений, только одно сканирование таблицы):

select * from (
  select *, cnt=count(*) over(partiton by A) from table
) as a 
where cnt >= 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...