모든 열을 기준으로 SQL 그룹화
열 이름을 지정하지 않고 테이블의 모든 열을 기준으로 그룹화하는 방법이 있습니까? 처럼:
select * from table group by *
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
그는 테이블에서 중복 행을 찾아 표시하려고합니다.
SELECT *, COUNT(*) AS NoOfOccurrences
FROM TableName GROUP BY *
HAVING COUNT(*) > 1
이를 수행하는 간단한 방법이 있습니까?
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
아니. 집계를 시도하고 있습니까? 그렇다면 필요한 것을 얻기 위해 이와 같은 것을 할 수 있습니다.
;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
이것은 근본적으로 아무것도 그룹화하지 않을 것임을 의미하기 때문입니다. 모든 열을 기준으로 그룹화하고 고유 인덱스가있는 적절하게 정의 된 테이블 SELECT * FROM table
이있는 경우 기본적으로 SELECT * FROM table GROUP BY *
.
전체 결과 세트에 대해 개수와 합계를 계산하고 싶었습니다. 나는 GROUP BY 1=1
.
짧은 대답 : 아니요. GROUP BY 절은 본질적으로 결과를 정렬하는 방식에 순서가 필요합니다. 필드 그룹화 순서가 다르면 결과가 달라집니다.
와일드 카드를 지정하면 문이 해석 및 예측할 수없는 동작에 개방됩니다.
Group by All을 사용할 수 있지만 Group by All은 이후 버전의 SQL Server에서 제거되므로주의하십시오.
내 제안은 다음과 같습니다.
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 ')
참고URL : https://stackoverflow.com/questions/800910/sql-grouping-by-all-the-columns
'Program Tip' 카테고리의 다른 글
언제 바이트 배열을 사용하고 언제 바이트 버퍼를 사용합니까? (0) | 2020.12.05 |
---|---|
ASP.NET MVC의 사용자 인증 및 권한 부여 (0) | 2020.12.05 |
offline_access 지원 중단 이후 액세스 토큰 유효성을 확장하는 방법 (0) | 2020.12.04 |
emacs에서 페어링 (밸런싱) 괄호로 이동하는 방법 (0) | 2020.12.04 |
Bitbucket 및 GitHub 모두에 Windows 용 GitHub 사용 (0) | 2020.12.04 |