2011-11-02 7 views
0

검색된 안녕과 낮음과 이렇게하는 방법을 찾을 수 없습니다. 나는 두 개의 기둥이있는 테이블을 가지고있다.카운트가 1 인 레코드 만 선택하십시오.

Order route 
===== ===== 
Order_1 100 
Order_1 101 
Order_2 102 
Order_3 103 
Order_4 104 

나는, 결과로 사전에

Order_2 102 
Order_3 103 
Order_4 104 

감사합니다.

+1

당신이 시도한 것을 보여주십시오. – NickLH

+0

SQL? 기음#? 당신이 여기있는 후에 무엇을 말하기 힘든 종류 ... – kaveman

+0

나쁜 형식에 대해 유감스럽게 생각해서, 나는 그것을 서둘러 내 타블렛에 입력했다. 고쳐 주셔서 감사합니다. ODP.NET을 사용하는 C# sql 문자열입니다. 섀넌의 대답은 훌륭했습니다. 대단히 감사합니다. 굉장 사이트. – ValiRossi

답변

4

Order은 예약 키워드이므로 대신 order_column을 사용했습니다.

첫 번째 테스트 데이터 : 그리고 전통적으로

create table order_route_table(order_column varchar2(20) 
    , route number); 

insert into order_route_table 
select 'Order_1', 100 from dual 
union all select 'Order_1', 101 from dual 
union all select 'Order_2', 102 from dual 
union all select 'Order_3', 103 from dual 
union all select 'Order_4', 104 from dual; 

: 분석과 함께

select order_column, min(route) 
from order_route_table 
group by order_column 
having count(*) = 1; 

: 어느 경우에

select order_column, route 
from (select order_column 
     , route 
     , count(*) over (partition by order_column) as order_count 
    from order_route_table) 
where order_count = 1; 

결과 :

ORDER_COLUMN    ROUTE 
-------------------- ---------- 
Order_2      102 
Order_3      103 
Order_4      104 
,
+0

감사합니다. 실제로 이름순을 사용하지 않았습니다. 도움에 감사드립니다. – ValiRossi

+0

이 경우 min 함수는 무엇을 수행합니까? – ValiRossi

+0

'group by '칼럼을'select' 절에서 사용하는 것은 group by 그룹에 있거나 aggregate 함수 안에서 사용해야합니다. 'Group by '에 라우트를 원하지 않으면 Order_1 행이 별도의 그룹에 표시되고 표시됩니다. 따라서 '최소'는 해당 그룹의 최소 경로를 얻습니다. 각 그룹은'having count (*) = 1' 때문에 하나의 밑줄을 가지고있어서'min'이 우리에게 그 경로를줍니다. '맥스 (Max) '도 효과가있다. –

관련 문제