Как добавить столбец в набор сгруппированных столбцов? - PullRequest
1 голос
/ 22 декабря 2011

Предположим, у меня есть этот запрос:

SELECT col1, col2, col3
FROM tab1
GROUP BY col1, col2, col3
HAVING COUNT(*) > 1    -- **************EDIT****************

Я хочу, чтобы этот набор столбцов был уникальным.Но теперь я хочу добавить col4, который можно дублировать, чтобы он не работал, если я добавлю его и сгруппирую.

Есть ли лучший способ сделать это, чем в SQL Server 2008 R2?

SELECT a.col1, a.col2, a.col3, b.col4
FROM (
    SELECT col1, col2, col3
    FROM tab1
    GROUP BY col1, col2, col3
    HAVING COUNT(*) > 1 -- **************EDIT****************
    ) a JOIN tab1 b 
ON a.col1 = b.col1
AND a.col2 = b.col2
AND a.col3 = b.col3

РЕДАКТИРОВАТЬ: Извините, ребята, это то, что я искал.Вы были правы для запроса, который я сначала разместил, простой SELECT сделает это.Мне нужно показать все значения col4 для каждой отдельной группы col1, col2, col3, когда существуют дубликаты.

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

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

Если вы выберете все четыре столбца, сгруппируете их по всем четырем и выберете COUNT (*), то счетчик будет представлять только количество раз, которое четвертый столбец встречается для каждого подмножества остальных трех.

SELECT col1, col2, col3, col4, COUNT(*) AS c
FROM tab1
GROUP BY col1, col2, col3, col4

Например, если ваши результаты ['JIM', 'JOE', 'BOB', 'BILLY', 5], это означает, что у вас есть 5 Билли на каждого Джима Джо Боба в парке трейлеров.

EDIT:

Попробуйте, как в моем последнем комментарии.

SELECT col1, col2, col3, col4
FROM tab1
1 голос
/ 22 декабря 2011

То, как ты это делаешь, мне кажется нормальным. Но вы также можете попробовать SELECT DISTINCT col1, col2, col3 FROM tab1 в производной таблице вместо SELECT col1, col2, col3 FROM tab1 GROUP BY col1, col2, col3. Я не уверен, если это имеет какое-либо значение в плане выполнения, хотя.

Кроме того, я могу неправильно понять, чего вы пытаетесь достичь, но, похоже, результат вашего запроса будет таким же, как и SELECT a.col1, a.col2, a.col3, a.col4 FROM table1 a

0 голосов
/ 22 декабря 2011

Вы можете использовать CTE, но в вашем методе нет ничего плохого:

WITH G AS (
  SELECT col1, col2, col3
  FROM tab1
  GROUP BY col1, col2, col3
)
SELECT G.col1, G.col2, G.col3, b.col4
FROM G JOIN tab1 b 
         ON G.col1 = b.col1
        AND G.col2 = b.col2
        AND G.col3 = b.col3;
...