2014-05-07 55 views
-3
 Session       initial final 
5a2572b8-c7bc-4e53-8731-266764fa4285 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4286 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4287 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4288 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4288 13  14 
5a2572b8-c7bc-4e53-8731-266764fa4288 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4289 10  10 
5a2572b8-c7bc-4e53-8731-266764fa4289 11  10 
5a2572b8-c7bc-4e53-8731-266764fa4210 14  14 
5a2572b8-c7bc-4e53-8731-266764fa4210 11  10 

我在SQL上述表(測試)中,i需要計算具有匹配其中initail =最終的最大數量的會話,反之亦然如何在兩個其他列中獲得具有相同值的最大數量的組?

+0

-1。請改善問題標題;並顯示你試圖解決這個問題。 – systemovich

+0

在這種情況下,我不確定您的意思是「反過來」。 –

+0

我的意思是在反之亦然,那我也需要最大數量的會議,其中初始劑量不等於最終價值以及 –

回答

0

可以使用一個共同的表,表達一個​​:

WITH CTE AS 
(
    SELECT Session, initial, final, 
    Sum = SUM(CASE WHEN initial=final THEN 1 END) Over (Partition By Session) 
    FROM dbo.Test 
) 
SELECT TOP 1 Session FROM CTE ORDER BY SUM DESC 

Demo

我假定 「反之亦然」 是指相反的順序。那麼你只需要使用ORDER BY SUM ASC。如果你不是想通過不平等的初始最終值命令(如上註釋),您可以使用此查詢:

WITH CTE AS(
    SELECT 
    Session, initial, final, 
    SumSame = SUM(CASE WHEN initial=final THEN 1 END) Over (Partition By Session), 
    SumNotSame = SUM(CASE WHEN initial<>final THEN 1 END) Over (Partition By Session) 
    FROM dbo.Test 
) 
SELECT TOP 1 Session 
FROM CTE 
ORDER BY SumSame DESC 

現在,你可以把它改成ORDER BY SumNotSame DESC得到最大-不平等的會議。

Demo

+0

它返回相同的值,要麼通過sumsame或sumnotsame命令 –

+0

不,它不會:[SumSame](http://sqlfiddle.com/#!3/0d310/4/0)和[SumNotSame](http: //sqlfiddle.com/#!3/0d310/3/0)。您可以包括所有列以查看會發生什麼。 –

+0

更多解釋請 –

0

獲取會話與匹配的最大數量是容易的。只需選擇所有匹配,按會話分組並取最高記錄。相同的不匹配。在這裏它們被合併:

select 
    match.session as match_session, 
    match.cnt as match_count, 
    mismatch.session as mismatch_session, 
    mismatch.cnt as mismatch_count 
from 
(
    select top(1) session, count(*) as cnt 
    from sessions 
    where initial = final 
    group by session 
    order by session desc 
) match 
cross join 
(
    select top(1) session, count(*) as cnt 
    from sessions 
    where initial != final 
    group by session 
    order by session desc 
) mismatch; 
相關問題