[SQL] 여러 열에 대한 고유 값을 선택
SQL여러 열에 대한 고유 값을 선택
나는 나무에 유사한 데이터의 많은 조각이 다른 열에 하나에 일치하는 테이블을 가지고 있고, 각각의 특정 잎에 대한 '잎'에서 다음 데이터
예를 들어,
Food Group Name Caloric Value
Vegetables Broccoli 100
Vegetables Carrots 80
Fruits Apples 120
Fruits Bananas 120
Fruits Oranges 90
나는 각 열의에만 고유 한 값을 반환하는 쿼리를 디자인, 그리고 다음 오버 플로우를 충당하기 위해 널링 것
예를 들어,
Food group Name Caloric Value
Vegetables Broccoli 100
Fruit Carrots 80
Apples 120
Bananas 90
Oranges
그러나 나는 내가 더 간단한 방법이있을 것이라고 기대했다, 이것은 지금 나는 경우와 함께 일을하려고 봤는데, 가능하면 확실하지 않다
해결법
-
==============================
1.당신은 단순히 손의 모든 고유 값을하려고하는 것 같다. 왜? 목적을 표시하기 위해? 그것은 응용 프로그램의 일이다 아닌 서버입니다. 당신은 단순히 같은 세 가지 쿼리를 할 수 :
당신은 단순히 손의 모든 고유 값을하려고하는 것 같다. 왜? 목적을 표시하기 위해? 그것은 응용 프로그램의 일이다 아닌 서버입니다. 당신은 단순히 같은 세 가지 쿼리를 할 수 :
SELECT DISTINCT [Food Group] FROM atable; SELECT DISTINCT Name FROM atable; SELECT DISTINCT [Caloric Value] FROM atable;
그에 따라 결과를 표시합니다.
하지만 당신은 하나 개의 테이블에 그들 모두를 가지고 주장하는 경우, 당신은이를 시도 할 수 있습니다 :
WITH atable ([Food Group], Name, [Caloric Value]) AS ( SELECT 'Vegetables', 'Broccoli', 100 UNION ALL SELECT 'Vegetables', 'Carrots', 80 UNION ALL SELECT 'Fruits', 'Apples', 120 UNION ALL SELECT 'Fruits', 'Bananas', 120 UNION ALL SELECT 'Fruits', 'Oranges', 90 ), atable_numbered AS ( SELECT [Food Group], Name, [Caloric Value], fg_rank = DENSE_RANK() OVER (ORDER BY [Food Group]), n_rank = DENSE_RANK() OVER (ORDER BY Name), cv_rank = DENSE_RANK() OVER (ORDER BY [Caloric Value]) FROM atable ) SELECT fg.[Food Group], n.Name, cv.[Caloric Value] FROM ( SELECT fg_rank FROM atable_numbered UNION SELECT n_rank FROM atable_numbered UNION SELECT cv_rank FROM atable_numbered ) r (rank) LEFT JOIN ( SELECT DISTINCT [Food Group], fg_rank FROM atable_numbered) fg ON r.rank = fg.fg_rank LEFT JOIN ( SELECT DISTINCT Name, n_rank FROM atable_numbered) n ON r.rank = n.n_rank LEFT JOIN ( SELECT DISTINCT [Caloric Value], cv_rank FROM atable_numbered) cv ON r.rank = cv.cv_rank ORDER BY r.rank
-
==============================
2.난 당신이 하나 개의 결과 집합이 필요한 이유를 내가 알고 싶은 것이 어떻게 됐을까? 무슨 같은 코드를 보면이 결과를 소비하는 것입니까? 각 행의 속성은 서로 아무 상관이 없습니다. 당신은, 말하자면, 한 세트의 내용을 구축하려면 드롭 다운 상자, 당신은 한 번에이 일을하는 것이 더 낫다. 요청한 결과 세트에서는 유용한 아무것도 할 데이터 세트 반복에 세 번해야 할 것입니다, 당신은 데이터 세트의 끝에 NULL을 위해 하나 체크를 할 때마다 또는 불필요하게 반복 처리 모든 방법을해야합니다.
난 당신이 하나 개의 결과 집합이 필요한 이유를 내가 알고 싶은 것이 어떻게 됐을까? 무슨 같은 코드를 보면이 결과를 소비하는 것입니까? 각 행의 속성은 서로 아무 상관이 없습니다. 당신은, 말하자면, 한 세트의 내용을 구축하려면 드롭 다운 상자, 당신은 한 번에이 일을하는 것이 더 낫다. 요청한 결과 세트에서는 유용한 아무것도 할 데이터 세트 반복에 세 번해야 할 것입니다, 당신은 데이터 세트의 끝에 NULL을 위해 하나 체크를 할 때마다 또는 불필요하게 반복 처리 모든 방법을해야합니다.
이 저장 프로 시저에있는 경우,하지 당신은 별도의 세 가지 SELECT DISTINCT를 실행하고 세 가지 결과에 따라 값을 반환 할 수 있습니다. 그럼 당신은 내가 추측 어쨌든 할 일을 할 것입니다 무엇을 한 번에 하나를 소모 할 수 있습니다.
실제로 값 사이의 연결이 존재하면, 배열이나리스트에 각각의 결과를 추가 한 다음 인덱스를 사용하여 병렬로 세 목록에 액세스 할 수있다.
-
==============================
3.이 어쩌면 같은 뭔가?
이 어쩌면 같은 뭔가?
select * from ( select case when row_number() over (partition by fruit_group) = 1 then fruit_group else null end as fruit_group, case when row_number() over (partition by name) = 1 then name else null end as name, case when row_number() over (partition by caloric) = 1 then caloric else null end as caloric from your_table ) t where fruit_group is not null or name is not null or caloric is not null
하지만이 어떤 의미를보고 실패
from https://stackoverflow.com/questions/5196194/selecting-distinct-values-for-multiple-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] (+)는 오라클 SQL의 기능은 무엇입니까? (0) | 2020.07.14 |
---|---|
[SQL] 비주얼 C #을 사용하여 SQL 데이터베이스에 이미지를 추가 (0) | 2020.07.14 |
[SQL] SQL 매개 변수를 사용하여 (이미지 일명) 삽입 / 업데이트 TBlobfield (0) | 2020.07.14 |
[SQL] SQL에서 정렬되지 않은 결과 (0) | 2020.07.14 |
[SQL] 스칼라 반환 함수를 호출 할 때 ExecuteScalar는 항상 널 (null)을 반환 (0) | 2020.07.14 |