2012-02-13 6 views
0

TL; DR MSSQL의 GROUP BY 절에 열을 추가하지 않고 어떻게 반환합니까? 형사법은 아래와 같습니다.올바른 사용법에 의한 그룹

안녕하세요 여러분, 그래서 최근에이 question에 물어 보니 훌륭한 해법을 통해 해부와 재결합을 할 수있었습니다. 내가 O.shoesize, O.favorite_color 즉 기회 '테이블에서 더 많은 열을 반환하려는 경우 여기에 이제 최종 결과

WITH UC AS 
(
    SELECT OSJ.opportunityid, OS.status, 
      ROW_NUMBER() OVER (PARTITION BY OSJ.opportunityid ORDER BY creationdate DESC) RN 
    FROM Opportunitystatusjoin OSJ 
    JOIN OpportunityStatus OS ON OSJ.opportunitystatusid = OS.opportunitystatusid 
) 
SELECT O.opportunityid , O.salesperson , 
    MAX(CASE 
     WHEN RN = 1 
      THEN UC.status 
     END) AS MostRecent , 
    MAX(CASE 
     WHEN RN = 2 
      THEN UC.status 
     END) AS SecondMostRecent 
FROM Opportunity O 
JOIN UC ON UC.opportunityid = O.opportunityid 
WHERE UC.RN <= 2 
GROUP BY O.opportunityid , O.salesperson 

, 난 BY 절 내 그룹에 추가해야합니다. 그러나 다른 열을 그룹화하려고하지 않기 때문에 단지 더러운 느낌을받습니다. 나는 단지 그들에게 각각의 기회를 보여주기를 바랍니다.

인터넷에서 발견 한 블로그는 가능한 한 중첩 된 항목까지 GROUP BY 절을 채우라고했습니다. 그러나, 나는 처음 문장 ("with UC ...")을 사용하기 때문에 직관적이지 않은 것으로 보인다. GROUP BY 절에 추가하지 않고 내 테이블의 다른 열을 포함시키는 것이 현명한 방법입니다. 열이 당신에 의해 그룹화되어 모두에 대해 동일한 값 위하여려고하는 경우에

답변

3

는, 당신은 이런 식으로 뭔가를 할 수 :

SELECT col1, col2, MAX(col3) FROM table GROUP BY col1, col2 
+0

나는 열에 대한 값이 모두 동일합니다 생각하지 않습니다 , 반환 된 기회에 대한 shoesizes 및 favorite_colors 다양한 변화가있을 것입니다. –

+1

다음 중 어떤 것을 나열 하시겠습니까? 가능한 모든 조합을 나열하려면 GROUP BY를 사용해야합니다. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

관련 문제