注册 登录
编程论坛 SQL Server论坛

group by 分组问题

ivanjoysky 发布于 2011-02-26 11:10, 892 次点击
望大神们写出下列实例的sql语句:

例子:
表1:
          摄像头id       车牌号
                1                   苏EM
                2                   苏EN
                3                   苏EX
                4                   苏EG
                5                   京A
                6                   渝G
                7                   苏A

需求如下:苏EM,苏EN   ,苏EX为一组,
                    不包括这三类——苏EM,苏EN   ,苏EX,且以苏E开头的为一组(如苏EG)
                    不以苏E开头的为一组。如(苏A,京A,渝G)

这个组该怎样分啊
6 回复
#2
gdy03492011-02-28 13:44
我就针对你写的需求简单的写了个方法,你看看是否是你所需要的,有问题的话可以联系我

select id,车牌号,组id from(
select id, 车牌号,'1' 组id from 表名 t where t.车牌号 in('苏EM','苏EN','苏EX')
union all
select id,车牌号,'2' 组id from 表名 t where t.车牌号 like '苏E%' and t.车牌号 not in('苏EM','苏EN','苏EX')
union all
select id,车牌号,'3' 组id from 表名 t where t.车牌号 not like '苏E%') group by id,车牌号,组id

#3
png2011-02-28 23:24
group by 用于数据的分组并汇总 - 其关键是汇总. 如:
StudentID    Grade
1            90
1            92
2            95
3            80
3            88
select StudentID, Avg(Grade) as Average_Grade
From StudentGradeTable
group by StudentID

应得出如下结果:
StudentID    Average_Grade
1            91
2            95
3            84
LZ的问题看不出有汇总的要求. 按二楼的建议用 Where 语句进行过滤, 省略 group by即可.
#4
gdy03492011-03-01 20:17
因为他给的数据并不能像简单的group by 那样能书写出来的,如果数据量大的话,就能看出效果了
#5
rachel_282011-03-01 22:47
不好意思,不太理解你的问题,不太明白你为什么要底分组。。其实你可以把每一种情况分别写出来啊!!

我建立的表名为bbcnGroupBy
{
苏EM,苏EN,苏EX为一组
select BusNumber as '车牌号-苏E_MNX',cameraID as '摄像头ID'
from bbcnGroupBy
where BusNumber like '苏E[M,N,X]%'
        执行结果为:
                车牌号-苏E_MNX    摄像头ID
                苏EM3242            2
                苏EN4564            3
                苏EX4535            1
                苏EM2342            2

以苏E开头的为一组,但不包括苏EM,苏EN,苏EX这三类
select BusNumber as '车牌号-苏E_^MNX',cameraID as '摄像头ID'
from bbcnGroupBy
where BusNumber like '苏E[^M,N,X]%'
        执行结果为:
                车牌号-苏E_^MNX    摄像头ID
                苏EG2342            4
                苏EA2342            3
                苏EK2342            5
                苏EH2342            7
                苏E92342            4

不以苏E开头的为一组
select BusNumber as '车牌号-^苏E',cameraID as '摄像头ID'
from bbcnGroupBy
where BusNumber not like '苏E%'
        执行结果为:
                车牌号-^苏E    摄像头ID
                晋A5R619            2
                京Nak527            3
                冀A9o90j            32
                豫BM2010            12
}

不知可不可以帮到你。。如果我理解错了,你愿意的话可以告诉我。。。
#6
png2011-03-01 23:12
回复 4楼 gdy0349
... 如果数据量大的话,就能看出效果了...

跟量大小没有关系.

楼主的问题涉及不到聚集函数 - 也就是说没有汇总的要求. 所以group by 子句不适用.
#7
autobot2011-03-02 15:44
select * from 表1 where 车牌号 like '苏E%'
select * from 表1 where 车牌号 not like '苏E%'

你的要求和分组应该没有关系,用这两个语句应该就可以。如果数据量不大就成。
1