1

次の列があります。

ID,  Col1, Col2, Col3,  Col4
1    Bruce Wayne Gotham City
2    Daffy Duck  Sat on the pond
3    Bruce Wayne Gotham City

私がする必要があるのは、すべてのレコード (ID、Col1-Col4) を選択し、各エントリのレコード数を表示することです。

SELECT Count(*) As Counter FROM TABLE

しかし、残りの列を選択するには、Group By を使用する必要があります。

SELECT (*) As Counter, ID,Col1,Col2,Col3,Col4 FROM TABLE Group By ID,Col1,Col2,Col3,Col4

ただし、これはそれぞれカウントが 1 の 3 つのレコードを返します。私が求めているのは、カウントが 2 のレコード (Bruce Wayne) とカウントが 1 のレコード (Daffy Duck) の 2 つのレコードです。

** アップデート。* *

結果は C# データグリッドで使用され、4 つの列すべてが表示されます。ID をリンクとして使用して、レコードをさらにドリルダウンしました。

したがって、データ グリッドは、合計 3 つのレコードがあり、数字をクリックすると 2 つの別々のレコードが表示されることを読み取ります。どのIDが(あなたが言及したように)どのレコードにリンクしていますか。

したがって、最初にカウントを取得して、ネストされた選択を行う必要がありますか?

4

3 に答える 3

1

レコード数で 4 つの列 (id、col1、col2、col3) をすべて選択する場合は、グループ化されたレコードから id の 1 つを選択する必要があります。

たとえば、次のようにMin(Id)/Max(Id)を選択できます。

select count(*) counter, min(id) id, col1, col2, col3
from t
group by col1,col2,col3

SQL フィドルの例

| COUNTER | ID |        COL1 |   COL2 |     COL3 |
--------------------------------------------------
|       2 |  1 | Bruce Wayne | Gotham |     City |
|       1 |  2 |  Daffy Duck | Sat on | the pond |
于 2013-06-10T15:10:31.160 に答える
0

すべてのレコードを選択する必要がある場合は、window関数を使用してカウントを取得します。

SELECT count(*) over (partition by Col1, Col2, Col3, Col4) as Counter,
       ID,Col1,Col2,Col3,Col4
 FROM TABLE;

2 つのレコードのみが必要な場合は、次の基準でグループ化します。

SELECT count(*) as Counter, Col1, Col2, Col3, Col4
FROM TABLE
group by Col1, Col2, Col3, Col4

id各行で一意であるため、各グループは 1 つの行で構成されます。

于 2013-06-10T14:51:01.230 に答える
-1

GROUP BY 句の順序を変更します。

GROUP BY Col1, Col2, Col3, Col4, ID

最初に ID でグループ化すると、2 つの Bruce Wayne レコードは異なるグループになります。

于 2013-06-10T14:50:28.477 に答える