2008-11-21 25 views
0

我有一個表有以下的列:SQL分組

 

A B C 
--------- 
1 10 X 
1 11 X 
2 15 X 
3 20 Y 
4 15 Y 
4 20 Y 

欲組基於所述柱B和C的數據,並計數在A列的不同的值。但是,如果有兩個或更多的行,其中A列的值是相同的,我想從B列中獲取最大值。

如果我做的結果的簡單組是:

 

B C Count 
-------------- 
10 X 1 
11 X 1 
15 X 1 
20 Y 2 
15 Y 1 

我想是這樣的結果:

 

B C Count 
-------------- 
11 X 1 
15 X 1 
20 Y 2 

是否有可能返回此結果的任何查詢。服務器是SQL Server 2005.

+0

請問A和C柱總是一起去?意思是,你能有5-15-X和5-17-Y嗎? (在兩者之間改變X/Y) – 2008-11-21 11:09:46

回答

2

我喜歡在步驟中工作:首先擺脫重複的A記錄,然後組。不是最高效的,但它適用於您的示例。

with t1 as (
    select A, max(B) as B, C 
     from YourTable 
     group by A, C 
) 
select count(A) as CountA, B, C 
    from t1 
    group by B, C 
+0

是的,那是有效的:) 試圖難以使用單個查詢...並忘記了其他選擇。 – Albert 2008-11-21 10:55:32

0

檢查了這一點。這應該在Oracle中起作用,儘管我還沒有對它進行測試;

select count(a), BB, CC from 
(
select a, max(B) BB, Max(C) CC 
from yourtable 
group by a 
) 
group by BB,CC 
2

其實我已經測試了這一點:

SELECT 
    MAX(B) AS B, 
    C, 
    Count 
FROM 
(
    SELECT 
     B, C, COUNT(DISTINCT A) AS Count 
    FROM 
     t 
    GROUP BY 
    B, C 
) X 
GROUP BY C, Count 

,這讓我:

B  C  Count  
---- ---- -------- 
15 X  1   
15 y  1   
20 y  2   
0
WITH cteA AS 
(
    SELECT 
     A, C, 
     MAX(B) OVER(PARTITION BY A, C) [Max] 
    FROM T1 
) 

SELECT 
    [Max] AS B, C, 
    COUNT(DISTINCT A) AS [Count] 
FROM cteA 
GROUP BY C, [Max];