首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

group by 分组有关问题,望大神讨论!

2012-06-21 
group by 分组问题,望大神讨论!!一般分组groupby后面只能跟字段列名,比如groupbyage——按年龄分组,比如有n

group by 分组问题,望大神讨论!!
一般分组group   by   后面只能跟字段列名,比如group   by   age——按年龄分组,比如有n个不同年龄就会分n组。
现在有一个需求就是细化对列名锁对应的值进行分组,比如需要将10—20岁分为一组,20—30分为一组。这时候   group   by后面应该怎样写呢???

望大神们写出下列实例的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)

这个组该怎样分啊
                   

[解决办法]

SQL code
select '类别(含EM,EN,EX)' '类别1', sum(case when(charindex('EM',tag)>0 or charindex('EN',tag)>0 or charindex('EX',tag)>0)then id else 0 end) '总数','类别(除类别1外,以E开头)' '类别2', sum(case when(charindex('EM',tag)<=0 and charindex('EN',tag)<=0 and charindex('EX',tag)<=0 and charindex('E',tag)=2)then id else 0 end) '总数','类别(其它)' '类别3', sum(case when(charindex('E',tag)<=0) then id else 0 end) '总数'from [tb]
[解决办法]
//前面回复错了,这个为准
SQL code
--建表create table #CarMonitor(ID int, CarID varchar(20))--数据insert into #CarMonitorselect 1,'苏EM' union allselect 2,'苏EM' union allselect 3,'苏EX' union allselect 4,'苏EG' union allselect 5,'京A' union allselect 6,'渝G' union allselect 7,'苏A' --分组统计select case charindex('苏E',CarID) when 0 then '其他'    else case charindex(CarID,'苏EM,苏EN,苏EX') when 0 then '非苏EM苏EN苏EX' else '苏EM苏EN苏EX' end      end as CarGroup, count(0) as [count] from #CarMonitorgroup by case charindex('苏E',CarID) when 0 then '其他'    else case charindex(CarID,'苏EM,苏EN,苏EX') when 0 then '非苏EM苏EN苏EX' else '苏EM苏EN苏EX' end      end --结果CarGroup       count-------------- -----------非苏EM苏EN苏EX     1其他             3苏EM苏EN苏EX      3(3 行受影响)
[解决办法]
SQL code
--显示SELECT * FROM table_nameORDER BYCASE     WHEN CHARINDEX(LEFT(车牌号, 3), N'苏EM,苏EN,苏EX') > 0 THEN 1  --苏EM,苏EN,苏EX为一组    WHEN LEFT(车牌号, 2) = N'苏E' THEN 2 --不包括以上三类且以苏E开头的为一组    ELSE 3 --其它3END--统计SELECT    车牌号类型 =         CASE             WHEN CHARINDEX(LEFT(车牌号, 3), N'苏EM,苏EN,苏EX') > 0 THEN N'苏EM|苏EN|苏EX'            WHEN LEFT(车牌号, 2) = N'苏E' THEN N'苏E'            ELSE N'其它'        END,    摄像头数量 = COUNT(1)FROM table_name
[解决办法]
因为你用的是oracle,这里是SQL SERVER版,我们的是T-SQL!
oracle里用 instr 函数代替charindex

热点排行