2009-10-19 7 views
3

select 절 ad nauseam에서 언급 한 필드를 반복 할 필요가 없도록 group by 절을 단축 할 수 있습니까? 예 :GROUP BY 절 단축

SELECT 
    field1, 
    field2, 
    field3, 
    field4 
FROM table 
GROUP BY 
    field1, 
    field2, 
    field3, 
    field4 

to: 

SELECT 
field1, 
field2, 
field3, 
field4 
FROM table 
GROUP BY 
SELECT.* 

... 또는 이와 비슷한 것. sp_executesql() 저장 프로 시저를 사용할 질의를 작성하고 있으며 내 변수에서 사용할 수있는 공간이 부족합니다. 고맙습니다.

답변

11

SELECT DISTINCT 또는 SELECT DISTINCTROW을 찾으십니까?

+1

Crud. 네, 뇌 기능을 가지고 있습니다. 별개의 것을 완전히 잊었다. 감사. – DaWolfman

+0

나는 투표를하고, 그가 DISTINCT가 실제로 질문 한 질문에 대답했다는 것을 깨달았다. 죄송합니다. –

8
SELECT 
    field1, 
    field2, 
    field3, 
    field4 
FROM table 
GROUP BY 1,2,3,4 

여기서 숫자는 선택 부분의 열 위치를 나타냅니다.

+0

+1 - 멋진 바로 가기 아이디어! –

+0

그것에 대해 몰랐습니다. 팁 고마워! – DaWolfman

+0

nice one :) 오늘 새로운 것을 배웠습니다 – knittl

0

그들은 2 개 개의 다른 개념입니다

  • SELECT = 이상

이제 집계하는 것을 = BY 출력

  • 그룹을 각 선택 항목은 집계 또는 GROUP BY에 있어야합니다. 종종 GROUP BY에는 SELECT보다 많은 열이 있습니다.

    그러나 나는 너무 많이 집계했다고 생각합니다. 파생 테이블이나 CTE를 사용하여 "이전"작업을 수행 할 수 있습니다. 당신의 예에서

    SELECT 
        T1.field1, T1.field2, foo.field3, foo.field4, foo.AggField5 
    FROM 
        table T1 
        JOIN 
        (SELECT 
         T2.keycol, T2.field3, T2.field4, SUM(T2.field5) AS AggField5 
        FROM 
         table T2 
        GROUP BY 
         T2.keycolT2.field3, T2.field4 
        ) foo ON T1.Keycol = foo.keycol 
    

    하지만,

  • 1

    DISTINCT와 GROUP BY 사이에 상당한 차이가 ... GROUP BY없이 DISTINCT 사용합니다. 비록 GROUP BY가 집계를 허용하더라도 간단한 쿼리에서 그들은 동일 할 수 있습니다.

    그러나뿐만 아니라이 아니라, DISTINCT은 같은 분야의 결정적 용도 (예, STARTDATE 및 DATEADD (일, 1, STARTDATE)있는 경우에도 DISTINCT를하기 전에 모든 분야을 작동합니다 - 실행을 확인 계획, DATEADD가 DISTINCT 이전에 완료되었음을 알 수 있습니다. 따라서 GROUP BY는 거의 항상 더 좋습니다.

    GROUP BY에 고유 색인이있는 것이 포함되면 그것 (예 : 기본 키), 해당 테이블의 다른 항목은 무시됩니다. 결국 GROUP BY 절에 다른 필드를 포함시켜 더 이상 고유하게 만들 수 없습니다.

    왜의 접근하지 : 당신은 여전히 ​​모든을 입력 할 필요가 있다는 것을 얻을

    GROUP BY t.id, u.id 
    /* All these other fields are ignored but here because they're 
        in the HAVING/SELECT/ORDER BY clauses 
    */ 
    , t.TransactionValue, u.Username, .... 
    

    를, 그리고 GROUP BY t.*을 가지고 좋은 것입니다,하지만 당신이 원한다면, 당신은 마이크로 소프트가 투표하여 알려 주시기 수 https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124654