Есть ли способ группировать все столбцы таблицы без указания имен столбцов? Как:
select * from table group by *
Есть ли способ группировать все столбцы таблицы без указания имен столбцов? Как:
select * from table group by *
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
Если вы используете 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
Он пытается найти и отобразить повторяющиеся строки в таблице.
SELECT *, COUNT(*) AS NoOfOccurrences
FROM TableName GROUP BY *
HAVING COUNT(*) > 1
Есть ли у нас простой способ сделать это?
Нет, потому что это в корне означает, что вы ничего не будете группировать. Если вы группируете по всем столбцам (и имеют правильно определенную таблицу w/уникальный индекс), то SELECT * FROM table
по существу совпадает с SELECT * FROM table GROUP BY *
.
Нету. вы пытаетесь сделать некоторую агрегацию? если это так, вы можете сделать что-то подобное, чтобы получить то, что вам нужно
;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
Короткий ответ: нет. Предложения GROUP BY по существу требуют порядка, чтобы они упорядочивали ваши результаты. Другой порядок группировок полей приведет к разным результатам.
Указание подстановочного знака оставит утверждение открытым для интерпретации и непредсказуемого поведения.
Я хотел делать подсчеты и суммы по полному набору результатов. Я достиг всех группировок с помощью GROUP BY 1=1
.
Вы можете использовать Group by All, но будьте осторожны, так как Group by All будет удалена из будущих версий SQL-сервера.
Вот мое предложение:
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 ')