2014-11-19 4 views
6

복제 :나는 다음과 같은 쿼리가

SELECT 
DISTINCT (TK.TICKETID), 
TK.DESCRIPTION, 
TK.CREATIONDATE, 
TK.REPORTEDBY, 
TK.OWNER, 
WF.ASSIGNCODE 
FROM ticket TK 
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID 
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE') 
ORDER BY TK.TICKETID; 

을하지만 TK.TICKETID 속성에 중복을 반환합니다. 그리고 만약 내가 다른 모든 속성을 제거 괜찮아요. 예 :

TK.TICKETID TK.DESCRIPTION TK.CREATIONDATE TK.REPORTEDBY TK.OWNER  WF.ASSIGNCODE 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV NOVIKOVVA 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV PRITULADV 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV SVESHNIKOVAV 

M.b. 내 질문은 간단하지만 나는 그것을 스스로 해결할 수 없다. 어떤 종류의 도움이 될만한 가치가 있습니다.

+6

'DISTINCT'는 *** NOT *** 기능. 항상 행의 모든 ​​** ** 열에서 작동합니다. Btw : 어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

+1

다른 할당 코드가 있습니다 – Milen

+0

원하는 출력 결과는 무엇입니까? – Horaciux

답변

3

이 시도 :

SELECT 
TK.TICKETID, 
TK.DESCRIPTION, 
TK.CREATIONDATE, 
TK.REPORTEDBY, 
TK.OWNER, 
max(WF.ASSIGNCODE) 
FROM ticket TK 
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID 
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE') 
group by 
TK.TICKETID, 
TK.DESCRIPTION, 
TK.CREATIONDATE, 
TK.REPORTEDBY, 
TK.OWNER 
ORDER BY TK.TICKETID; 
+0

고마워요, 작동합니다! – Cove

+0

왜 이것이 효과가 있는지 조금 설명 할 수 있습니까? 비슷한 SQL 있지만 max() 내 경우에는 작동하지 않습니다. – James

+0

@James 질문을 올려주세요. – Horaciux

1

select 쿼리에는 여러 개의 열이 있습니다. 쿼리는 대괄호 안의 값뿐만 아니라 모든 열의 고유성을 검사합니다.

SQL DISTINCT 키워드는 SELECT 문과 함께 사용되어 모든 중복 레코드을 제거하고 유일한 레코드 만 가져 오기합니다.. 이 당신의 쿼리를 수정하는 경우뿐만 아니라 열

을 참고 : 당신은 하나의 결과를 얻을 수

SELECT 
DISTINCT (TK.TICKETID), 
TK.DESCRIPTION, 
TK.CREATIONDATE, 
TK.REPORTEDBY, 
TK.OWNER 
FROM ticket TK 
INNER JOIN wfassignment WF on WF.OWNERID = TK.TICKETUID 
WHERE TK.status not in ('ЧЕРНОВИК', 'ЗАКРЫТ', 'ВЫПОЛНЕН') AND WF.ASSIGNSTATUS not in ('COMPLETE', 'INACTIVE') 
ORDER BY TK.TICKETID; 

.

출력 결과에 별표가 표시된 것과는 다음과 같습니다.

TK.TICKETID TK.DESCRIPTION TK.CREATIONDATE TK.REPORTEDBY TK.OWNER  **WF.ASSIGNCOD**E 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV **NOVIKOVVA** 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV **PRITULADV** 
О1013249 Право доступа 02.06.14  CHERNOVDK  SKACHKOVSV **SVESHNIKOVAV** 
+0

결과가 좋지만 WF.ASSIGNCODE 속성이 손실됩니다. 그리고 Horaciux의 모든 해결책은 괜찮습니다. 도와 주셔서 감사합니다. – Cove

+0

@Cove 아이디어는 개념을 이해하는 데 도움이되는 것이지 솔루션을 제공하는 것이 아닙니다. :) –

+0

DISTINCT가 내가 원하는 방식으로 작동하지 않는다는 모든 의견을들은 후에 이해합니다. 집계 함수와 Group By는 실제로 가장 간단한 솔루션이지만 ROWNUM 함수는 오라클에서도 다소 흥미 롭습니다. 숙제 일 것입니다. – Cove

관련 문제