2017-11-04 1 views
0

이것은 내 쿼리 결과입니다.여러 열에 대한 구분 및 순서

query result

나는에 의해 사용 별개의 여러 순서를 시도하고있다. 어쩌면 나는 말할 수 없었다. 하지만 매개 변수에 의한 첫 번째 순서는 "우선 순위 1"열이고 둘째 매개 변수 별 순서는 고유 한 Sid의 "점"입니다. 그래서; 나를 위해

가장 중요한 열은 "priorty1"

두 번째 가장 중요한 열 "포인트" 그러나 모든 "SID"가 한 번에 표시 될 것이다.

내가 원하는 것은 무엇입니까? priorty1이 ID를 가진 사람 중 최대 때문에

  • I 이드 원하는 내가 포인트 ID 1510

enter image description here과 사람 사이에, 최대 때문에 이드 9입니다 원하는 1509

  • 7

  • 답변

    2

    에서, 당신은 당신의 결과 집합에 순위 또는 Row_orders 할당 Row_number 기능을 사용할 수 있습니다

    0
    SELECT Sid, 
         MAX(Point) KEEP (DENSE_RANK FIRST ORDER BY (priority1, Point)) as top_point, 
         MAX(priority1) KEEP (DENSE_RANK FIRST ORDER BY (priority1, Point)) as top_priority, 
         .... 
    FROM (The query you have) 
    GROUP By Sid 
    

    더 읽기 여기 https://docs.oracle.com/cd/B19306_01/server.102/b14223/analysis.htm#DWHSG0205

    별명으로 나는 하나의 가치를 의미하므로 그룹화의 기반이된다.

    SELECT * 
    FROM 
    (
        SELECT ID, 
          [Sid], 
          [Point], 
          [priority1], 
          JoinDate, 
          Title, 
          Content, 
          ROW_NUMBER() OVER(PARTITION BY [Sid] ORDER BY [priority1] desc, [Point] desc) AS RN 
        FROM <your_resultset> 
    ) a where a.RN = 1; 
    

    결과 :

    ,344,792,432

    UPDATE

    여기 https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql

    SELECT 
        Sid, priority1, Point, 
        row_number() over(partition by Sid order by priority1, Point) as roworder 
    FROM (the query) 
    HAVING roworder=1 ; 
    
    +0

    내가 "DENSE_RANK는"경우 MSSQL에서 사용할 수를 확인할 수 있습니까? –

    +0

    https://docs.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql하지만 내 구문이 SQL Server에 적합하지 않습니다. – StanislavL

    +0

    예, 구문이 잘못되었습니다. 또 다른 아이디어가 있습니까? –

    2

    cte와 row_number을 사용하면 원하는 결과를 얻을 수 있습니다.

    WITH cte as 
        (SELECT t1.*, ROW_NUMBER() over(PARTITION BY sid 
                ORDER BY priority DESC, point DESC) AS rn 
        FROM table1 t1) 
    SELECT id, 
         sid, 
         point, 
         priority --- and other columns 
    FROM cte 
    WHERE rn = 1 
    

    결과 :

    id sid  point priority 
    --------------------------- 
    7 1509 10  3 
    9 1510 45  2 
    

    당신은 데모 here

    관련 문제