SQL查询无法正常工作

时间:2013-06-10 14:45:36

标签: sql tsql

我有以下专栏:

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(如你所提到的)链接到哪个记录。

因此,我是否需要进行嵌套选择,先获取计数?

3 个答案:

答案 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

SQL FIDDLE EXAMPLE

| 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记录位于不同的组中。