Подтвердить что ты не робот

Группирование SQL по всем столбцам

Есть ли способ группировать все столбцы таблицы без указания имен столбцов? Как:

select * from table group by *
4b9b3361

Ответ 1

Ключевое слово DISTINCT


Я считаю, что вы пытаетесь сделать следующее:
SELECT DISTINCT * FROM MyFooTable;

Если вы группируете все столбцы, вы просто запрашиваете удаление дубликатов данных.

Например, таблица со следующими данными:

 id |     value      
----+----------------
  1 | foo
  2 | bar
  1 | foo
  3 | something else

Если вы выполняете следующий запрос, который по существу совпадает с SELECT * FROM MyFooTable GROUP BY *, если вы принимаете *, означает все столбцы:

SELECT * FROM MyFooTable GROUP BY id, value;

 id |     value      
----+----------------
  1 | foo
  3 | something else
  2 | bar

Он удаляет все повторяющиеся значения, что существенно делает его семантически идентичным с использованием ключевого слова DISTINCT, за исключением упорядочения результатов. Например:

SELECT DISTINCT * FROM MyFooTable;

 id |     value      
----+----------------
  1 | foo
  2 | bar
  3 | something else

Ответ 2

Если вы используете SqlServer, для вас должно работать определенное ключевое слово. (Не знаю о других базах данных)

declare @t table (a int , b int)

insert into @t (a,b) select 1, 1
insert into @t (a,b) select 1, 2
insert into @t (a,b) select 1, 1

select distinct * from @t

приводит к

a b
1 1
1 2

Ответ 3

Он пытается найти и отобразить повторяющиеся строки в таблице.

SELECT *, COUNT(*) AS NoOfOccurrences
FROM TableName GROUP BY *
HAVING COUNT(*) > 1

Есть ли у нас простой способ сделать это?

Ответ 4

Нет, потому что это в корне означает, что вы ничего не будете группировать. Если вы группируете по всем столбцам (и имеют правильно определенную таблицу w/уникальный индекс), то SELECT * FROM table по существу совпадает с SELECT * FROM table GROUP BY *.

Ответ 5

Нету. вы пытаетесь сделать некоторую агрегацию? если это так, вы можете сделать что-то подобное, чтобы получить то, что вам нужно

;with a as
(
     select sum(IntField) as Total
     from Table
     group by CharField
)
select *, a.Total
from Table t
inner join a
on t.Field=a.Field

Ответ 6

Короткий ответ: нет. Предложения GROUP BY по существу требуют порядка, чтобы они упорядочивали ваши результаты. Другой порядок группировок полей приведет к разным результатам.

Указание подстановочного знака оставит утверждение открытым для интерпретации и непредсказуемого поведения.

Ответ 7

Я хотел делать подсчеты и суммы по полному набору результатов. Я достиг всех группировок с помощью GROUP BY 1=1.

Ответ 8

Вы можете использовать Group by All, но будьте осторожны, так как Group by All будет удалена из будущих версий SQL-сервера.

Ответ 9

Вот мое предложение:

DECLARE @FIELDS VARCHAR(MAX), @NUM INT

--DROP TABLE #FIELD_LIST

SET @NUM = 1
SET @FIELDS = ''

SELECT 
'SEQ' = IDENTITY(int,1,1) ,
COLUMN_NAME
INTO #FIELD_LIST
FROM Req.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'new340B'

WHILE @NUM <= (SELECT COUNT(*) FROM #FIELD_LIST)
BEGIN
SET @FIELDS = @FIELDS + ',' + (SELECT COLUMN_NAME FROM #FIELD_LIST WHERE SEQ = @NUM)
SET @NUM = @NUM + 1
END

SET @FIELDS = RIGHT(@FIELDS,LEN(@FIELDS)-1)

EXEC('SELECT ' + @FIELDS + ', COUNT(*) AS QTY FROM [Req].[dbo].[new340B] GROUP BY ' + @FIELDS + ' HAVING COUNT(*) > 1  ')