0

次の列を持つテーブルがあります。

ABC
----------
1 10 ×
1 11 ×
2 15 ×
3 20歳
4 15 年
4 20歳

B 列と C 列に基づいてデータをグループ化し、A 列の個別の値をカウントしたいと考えています。しかし、A 列の値が同じ行が 2 つ以上ある場合は、B 列から最大値を取得したいと考えています。

結果で単純なグループを作成すると、次のようになります。

BCカウント
--------------
10×1
11×1
15×1
20年2
15歳1

私が欲しいのはこの結果です:

BCカウント
--------------
11×1
15×1
20年2

この結果を返すことができるクエリはありますか。サーバーは SQL Server 2005 です。

4

4 に答える 4

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
于 2008-11-21T10:43:06.153 に答える
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        
于 2008-11-21T10:44:46.633 に答える
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];
于 2008-11-21T11:04:50.600 に答える
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
于 2008-11-21T10:41:07.840 に答える