2016-06-08 1 views
0

기본적으로 샘플을 하나의 Excel 시트에로드 할 수 있도록 행 수를 줄이기 위해 샘플 데이터 집합이 필요합니다.SQL을 사용하여 분산 된 샘플 세트를 반환 할 수 있습니까?

나는 분석 함수와이 Ask Tom 게시물을 보았습니다.하지만 필자는 분석 그룹핑을 사용할 필요가 없기 때문에 필요한 결과를 얻을 수 없습니다.

다음은 데이터를 나타냅니다. 각 행은 고유합니다. Cat_No이 기본 키입니다.

 
     CAT_NO |PROD_CODE |DESCRIPTION |COLOR | 
     SH1 |SH   |Shirt  |Blue | 
     SH2 |SH   |Shirt  |Red | 
     BT1 |BT   |Belt  |Black | 
     BT4 |BT   |Belt  |Brown | 
     WT1 |WT   |Watch  |Silver| 
     WT6 |WT   |Watch  |Gold | 

PROD_CODE에 대한 모든 열이 하나 개의 행을 반환합니다 SQL 쿼리를 작성할 수 있습니까? 그게 뭐야?

PSQL과 TSQL을 모두 사용해야하는 ANSI SQL 솔루션이 있기를 바랍니다. 또한 테이블에 수백만 개의 행이 있어도 성능은별로 고려하지 않습니다. 이것은 문서화를위한 샘플 데이터를 한 번 실행하는 것입니다.

예를 들어, 그 결과는 다음과 같을 수 있습니다 :

 
     CAT_NO |PROD_CODE |DESCRIPTION |COLOR | 
     SH1 |SH   |Shirt  |Blue | 
     BT4 |BT   |Belt  |Brown | 
     WT6 |WT   |Watch  |Gold | 

한 행을 각 PROD_CODE 위해. 모든 행이 허용됩니다. 당신이 무엇을 얻을 데이터 문제가되지 않는 경우

+0

어떤 결과가 같아야? –

+0

@vkp는 허용되는 결과를 포함하도록 질문을 편집했습니다. – Karl

+0

prod_code 당 반환되는 데이터가 중요하지 않은 경우 row_num (as prod_code order by cat_no)을 row_num'으로 사용하고'row_num = 1 '에 결과 집합을 필터링 할 수 있습니다. – jpw

답변

0

다시 prod_code 당 당신은 row_number() over (partition by prod_code order by cat_no) as row_num을 사용하고이 row_num = 1에 설정 결과적 필터링 할 수 있습니다. 이 같은

뭔가 :

SELECT CAT_NO, PROD_CODE, DESCRIPTION, COLOR 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY PROD_CODE ORDER BY CAT_NO) AS row_num 
    FROM TABLE 
) t 
WHERE t.row_num = 1 
+0

감사합니다. 테스트를 거쳐 필요한 결과를 얻었습니다. 나는 당신의 대답이 내 것보다 낫다. 왜냐하면'where' 절은'PROD_CODE' 당 둘 이상의 샘플 행을 반환하도록 수정 될 수 있다고 가정하기 때문이다. 'ORDER BY' 절이 필요합니까? – Karl

+1

@ Karl row_number가 (적어도 t-sql에서는) 작동하려면'order by'가 필요합니다. 그룹 당 더 많은 샘플을 원할 경우 더 높은 행 번호를 허용하도록 where 절을 변경할 수 있습니다. – jpw

1
select * 
from 
( select * 
     , row_number() over (partition by PROD_CODE order by CAT_NO) as rn 
    from table 
) tt 
where tt.rn = 1 
+0

You 및 @jpw는 똑같은 대답과 당연히 당신이 처음이라는 것을 압니다 만, 처음에 당신의 모습을보기 시작했을 때, 'FROM'이 사라져서 저를 버렸습니다. – Karl

+0

@ 칼. 나는 즉각적인 편집을했고 나는 처음이었다. 기꺼이 회복되었습니다. – Paparazzi

0

그리고,이뿐만 아니라 작동합니다

SELECT * 
    FROM TABLE T 
    WHERE T.CAT_NO IN (SELECT MAX(T1.CAT_NO) FROM TABLE T1 GROUP BY PROD_CODE) 
관련 문제