分组时提取ID

时间:2014-09-16 12:38:06

标签: sql-server-2005 sql-server-2012

假设我们有以下数据集。

  

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年,所以如果那里有一个更好的技巧,我想学习两种方法。)

1 个答案:

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