假设我们有以下数据集。
ID C1 C2
1 - a - a
2 - b - b
3 - a - a
4 - a - b
5 - a - b
6 - b - b
我可以执行以下语句:
select C1, C2 from Hazaa
group by C1, C2
但是,我也希望能够从 ID 列中获取值。当然,我理解它不可能就是这样。我的条件是,它是列出的每个分组成员中最低的 ID 值。
我已经尝试使用谷歌搜索,但我认为我以笨拙的方式表达我的请求,因为谷歌给了我虚无论,至少就我所知。最好的打击是this one但是,坦率地说,我不确定我是否理解它是如何完成的。 (我需要它在2005年工作,但将来我们将搬到2012年,所以如果那里有一个更好的技巧,我想学习两种方法。)
答案 0 :(得分:1)
您需要在群组中指定所需的ID,这将显示每个群组的第一个和最后一个:
SELECT min(ID),max(ID),count(ID),C1, C2 from Hazaa group by C1, C2
您需要min(ID)
,但请查看其他值,以便了解所发生的情况。
group by
将多行合并为一个,您可以使用min()
,max()
,count()
等聚合函数来获取每个组的值。
示例代码:
declare @Hazaa table (ID int,c1 char(1), c2 char(1))
insert into @Hazaa values (1 , 'a' , 'a')
insert into @Hazaa values (2 , 'b' , 'b')
insert into @Hazaa values (3 , 'a' , 'a')
insert into @Hazaa values (4 , 'a' , 'b')
insert into @Hazaa values (5 , 'a' , 'b')
insert into @Hazaa values (6 , 'b' , 'b')
SELECT
min(ID) AS MinID,max(ID) AS MaxID,count(ID) AS CountOf,C1, C2
from @Hazaa group by C1, C2
输出:
MinID MaxID CountOf C1 C2
----------- ----------- ----------- ---- ----
1 3 2 a a
4 5 2 a b
2 6 2 b b
(3 row(s) affected)