[SQL] 하나 개의 컬럼에 DISTINCT SELECT
SQL하나 개의 컬럼에 DISTINCT SELECT
SQL 서버를 사용하여, 나는이 ...
ID SKU PRODUCT
=======================
1 FOO-23 Orange
2 BAR-23 Orange
3 FOO-24 Apple
4 FOO-25 Orange
내가 원하는
1 FOO-23 Orange
3 FOO-24 Apple
이 쿼리가 나를 점점되지 않습니다. 어떻게 하나 개의 컬럼에 DISTINCT 선택할 수 있습니까?
SELECT
[ID],[SKU],[PRODUCT]
FROM [TestData]
WHERE ([PRODUCT] =
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%'))
ORDER BY [ID]
해결법
-
==============================
1.당신은 SQL Server 2005의 이상에 걸 가정하면, 당신은 ROW_NUMBER ()와 CTE를 사용할 수 있습니다 :
당신은 SQL Server 2005의 이상에 걸 가정하면, 당신은 ROW_NUMBER ()와 CTE를 사용할 수 있습니다 :
SELECT * FROM (SELECT ID, SKU, Product, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowNumber FROM MyTable WHERE SKU LIKE 'FOO%') AS a WHERE a.RowNumber = 1
-
==============================
2.가장 간단한 해결책은 일치하는 검색어 최소 ID를 찾기위한 하위 쿼리를 사용하는 것입니다. 서브 쿼리에서 대신 DISTINCT의 BY GROUP을 사용 :
가장 간단한 해결책은 일치하는 검색어 최소 ID를 찾기위한 하위 쿼리를 사용하는 것입니다. 서브 쿼리에서 대신 DISTINCT의 BY GROUP을 사용 :
SELECT * FROM [TestData] WHERE [ID] IN ( SELECT MIN([ID]) FROM [TestData] WHERE [SKU] LIKE 'FOO-%' GROUP BY [PRODUCT] )
-
==============================
3.이 시도:
이 시도:
SELECT t.* FROM TestData t INNER JOIN (SELECT MIN(ID) as MinID FROM TestData WHERE SKU LIKE 'FOO-%' ) dt ON t.ID=dt.MinID
편집하다 영업 이익은 (이제 모든 보여 주었다 이전에 하나 개의 결과 만 행을했다) 자신의 samle 출력을 수정하면이 올바른 쿼리입니다 :
declare @TestData table (ID int, sku char(6), product varchar(15)) insert into @TestData values (1 , 'FOO-23' ,'Orange') insert into @TestData values (2 , 'BAR-23' ,'Orange') insert into @TestData values (3 , 'FOO-24' ,'Apple') insert into @TestData values (4 , 'FOO-25' ,'Orange') --basically the same as @Aaron Alton's answer: SELECT dt.ID, dt.SKU, dt.Product FROM (SELECT ID, SKU, Product, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowID FROM @TestData WHERE SKU LIKE 'FOO-%' ) AS dt WHERE dt.RowID=1 ORDER BY dt.ID
-
==============================
4.나는 그것이 육년 전 이상 질문을 받았다 알고 있지만 지식은 여전히 지식이다. 내가 SQL 서버 2000에서 실행했다 이것은 무엇보다도 다른 솔루션입니다 :
나는 그것이 육년 전 이상 질문을 받았다 알고 있지만 지식은 여전히 지식이다. 내가 SQL 서버 2000에서 실행했다 이것은 무엇보다도 다른 솔루션입니다 :
DECLARE @TestData TABLE([ID] int, [SKU] char(6), [Product] varchar(15)) INSERT INTO @TestData values (1 ,'FOO-23', 'Orange') INSERT INTO @TestData values (2 ,'BAR-23', 'Orange') INSERT INTO @TestData values (3 ,'FOO-24', 'Apple') INSERT INTO @TestData values (4 ,'FOO-25', 'Orange') SELECT DISTINCT [ID] = ( SELECT TOP 1 [ID] FROM @TestData Y WHERE Y.[Product] = X.[Product]) ,[SKU]= ( SELECT TOP 1 [SKU] FROM @TestData Y WHERE Y.[Product] = X.[Product]) ,[PRODUCT] FROM @TestData X
-
==============================
5.
SELECT min (id) AS 'ID', min(sku) AS 'SKU', Product FROM TestData WHERE sku LIKE 'FOO%' -- If you want only the sku that matchs with FOO% GROUP BY product ORDER BY 'ID'
-
==============================
6.여기에 일부 인라인 값 덕분에 다른 답변의 몇 가지로 기본적으로 동일한 버전은,하지만 당신은 테스트, (그리고 원치 않는 테이블을 생성하지 않고)로 SQL 서버 관리 스튜디오에 붙여 복사 할 수있다.
여기에 일부 인라인 값 덕분에 다른 답변의 몇 가지로 기본적으로 동일한 버전은,하지만 당신은 테스트, (그리고 원치 않는 테이블을 생성하지 않고)로 SQL 서버 관리 스튜디오에 붙여 복사 할 수있다.
WITH [TestData]([ID],[SKU],[PRODUCT]) AS ( SELECT * FROM ( VALUES (1, 'FOO-23', 'Orange'), (2, 'BAR-23', 'Orange'), (3, 'FOO-24', 'Apple'), (4, 'FOO-25', 'Orange') ) AS [TestData]([ID],[SKU],[PRODUCT]) ) SELECT * FROM [TestData] WHERE [ID] IN ( SELECT MIN([ID]) FROM [TestData] GROUP BY [PRODUCT] )
결과
ID SKU PRODUCT 1 FOO-23 Orange 3 FOO-24 Apple
나는 다음을 무시했다 ...
WHERE ([SKU] LIKE 'FOO-%')
저자 결함 코드와 질문의 일부의 유일한 부분으로. 그것은 이곳을 찾는 사람들에게 도움이 될 가능성이 있습니다.
-
==============================
7.이 시도:
이 시도:
SELECT * FROM [TestData 사용] WHERE ID를 (구별 MIN (ID를 선택) [TestData 사용] GROUP BY 제품)
from https://stackoverflow.com/questions/966176/select-distinct-on-one-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 INSERT INTO 테이블 VALUES ... INSERT INTO 테이블 SET 대 (0) | 2020.03.22 |
---|---|
[SQL] 두 번째로 큰 값을 찾을 수있는 간단한 SQL 쿼리는 무엇입니까? (0) | 2020.03.22 |
[SQL] 어떻게 플라스크-SQLAlchemy의 응용 프로그램에서 원시 SQL을 실행합니다 (0) | 2020.03.22 |
[SQL] 안드로이드 SQLite는의 날짜와 작업에 가장 좋은 방법은 [마감] (0) | 2020.03.22 |
[SQL] T-SQL : 모든 중복 행을 삭제하지만 하나를 유지 [중복] (0) | 2020.03.22 |