我有以下专栏:
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来选择其余的cols:
SELECT (*) As Counter, ID,Col1,Col2,Col3,Col4 FROM TABLE Group By ID,Col1,Col2,Col3,Col4
然而,这返回三个recods每个计数为1 - 我所追求的是两个记录,一个计数为2(Bruce Wayne)和一个计数为1(Daffy Duck)
**更新。 * *
结果将用于C#datagrid,显示所有四个cols,我使用ID作为链接进一步深入到记录中。
所以数据网格会读取,我总共有3条记录,单击数字会显示两条独立的记录 - 所以我想我需要的东西比我之前所说的更复杂,因为我会需要知道哪个ID(如你所提到的)链接到哪个记录。
因此,我是否需要进行嵌套选择,先获取计数?
答案 0 :(得分:1)
如果要选择包含记录数的所有四列(id,col1,col2,col3),则必须从分组记录中选择一个ID。
例如,您可以选择Min(Id)
/ Max(Id)
,如下所示;
select count(*) counter, min(id) id, col1, col2, col3
from t
group by col1,col2,col3
| COUNTER | ID | COL1 | COL2 | COL3 |
--------------------------------------------------
| 2 | 1 | Bruce Wayne | Gotham | City |
| 1 | 2 | Daffy Duck | Sat on | the pond |
答案 1 :(得分:0)
如果您需要选择所有记录,请使用window
功能获取计数:
SELECT count(*) over (partition by Col1, Col2, Col3, Col4) as Counter,
ID,Col1,Col2,Col3,Col4
FROM TABLE;
如果您只想要两个记录,那么您需要一个分组:
SELECT count(*) as Counter, Col1, Col2, Col3, Col4
FROM TABLE
group by Col1, Col2, Col3, Col4
id
在每一行都是唯一的,因此每个组都包含一行。
答案 2 :(得分:-1)
更改GROUP BY子句中的顺序:
GROUP BY Col1, Col2, Col3, Col4, ID
如果您首先按ID分组,则两个Bruce Wayne记录位于不同的组中。