SELECT  SUM(population),
        CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END;
    這樣如果執行下來不就是 ..... group by '亞洲' 或者 group by '北美洲' 嗎? 難倒分組還可以使用值? 好像不行吧!請大家賜教!!!!

解决方案 »

  1.   

    不是直接使用值,而是通过一个虚似的列,类似于你GROUP BY 视图中的一个计算列一样。
      

  2.   

    是先对CASE country
                    WHEN '中国'     THEN '亚洲'
                    WHEN '印度'     THEN '亚洲'
                    WHEN '日本'     THEN '亚洲'
                    WHEN '美国'     THEN '北美洲'
                    WHEN '加拿大'  THEN '北美洲'
                    WHEN '墨西哥'  THEN '北美洲'
            ELSE '其他' END进行计算,然后殷实计算结果进行分组。
      

  3.   

    declare @table  table (id int , name varchar(20))
    insert @table select 1,'a' union all
    select 2,'b'
    gocreate trigger tri
    on @table 
    for update
    ason @table 這裡怎麼有錯誤呢???  那個group by 還是有點不懂....
      

  4.   

    create trigger tri
    on @table 
    for update
    as
    on @table 這裡怎麼有錯誤呢??? 那個group by 還是有點不懂....
    表变量能有触发器?
    SELECT  population,
            CASE country
                    WHEN '中国'     THEN '亚洲'
                    WHEN '印度'     THEN '亚洲'
                    WHEN '日本'     THEN '亚洲'
                    WHEN '美国'     THEN '北美洲'
                    WHEN '加拿大'  THEN '北美洲'
                    WHEN '墨西哥'  THEN '北美洲'
            ELSE '其他' END
    FROM    Table_A你先不SUM看看这个结果吧
      

  5.   

    GROUP BY CASE country
                    WHEN '中国'     THEN '亚洲'
                    WHEN '印度'     THEN '亚洲'
                    WHEN '日本'     THEN '亚洲'
                    WHEN '美国'     THEN '北美洲'
                    WHEN '加拿大'  THEN '北美洲'
                    WHEN '墨西哥'  THEN '北美洲'
            ELSE '其他' END;大家就說說,這個返回個什麽吧.. 每次執行完成以後數據庫真實的列是什麽??? 
      

  6.   

    SELECT population,
      CASE country
      WHEN '中国' THEN '亚洲'
      WHEN '印度' THEN '亚洲'
      WHEN '日本' THEN '亚洲'
      WHEN '美国' THEN '北美洲'
      WHEN '加拿大' THEN '北美洲'
      WHEN '墨西哥' THEN '北美洲'
      ELSE '其他' END AS GRP
    FROM Table_A你先看看这个返回什么,要不然你再把它子查询一次再GROUP BY ,明白?
      

  7.   

    放到SELECT中看就明白了,77已给出例子。
      

  8.   

    compute the population of each state
      

  9.   

    SELECT population,
      CASE country
      WHEN '中国' THEN '亚洲'
      WHEN '印度' THEN '亚洲'
      WHEN '日本' THEN '亚洲'
      WHEN '美国' THEN '北美洲'
      WHEN '加拿大' THEN '北美洲'
      WHEN '墨西哥' THEN '北美洲'
      ELSE '其他' END AS GRP
    FROM Table_A這個返回將中國,印度, 換成了 亞洲. .....
      

  10.   


    600 亚洲
    100 北美洲
    100 北美洲
    200 其他
    300 其他
    250 亚洲
    200 其他
    50 北美洲
    250 亚洲
    100 北美洲
    300 其他
    600 亚洲這個我我知道.. 但是再去group by 我實在就不知道他是按照那一列去分組的. 因為 group by 
     CASE name
      WHEN '中国' THEN '亚洲'
      WHEN '印度' THEN '亚洲'
      WHEN '日本' THEN '亚洲'
      WHEN '美国' THEN '北美洲'
      WHEN '加拿大' THEN '北美洲'
      WHEN '墨西哥' THEN '北美洲'
      ELSE '其他' END他確實返回的是一個字符嘛! 又不是列.....
      

  11.   

    我們 group by 都是要使用列名稱去分組的,但是現在他返回的是一個字符, 這能分組碼?  
    呵呵!! 請大家指教!!
      

  12.   


    汗,每一个NAME返回一个相对应的字符100 北美洲
    300 其他
    600 亚洲再分组不就是按后面的那个 统计了吗,其实只是另外生成的一列而已
      

  13.   

    那您就寫給靜態的sql吧比如說
    declare @table table (name varchar(20),po int)
    insert into @table select 
    '中国',600 union all
    select '美国',100 union all
    select '加拿大',    100 union all
    select '英国'  ,  200 union all
    select '法国'  ,  300 union all
    select '日本'   , 250 union all
    select '德国'   , 200 union all
    select '墨西哥'  ,  50 union all
    select '印度'   , 250 SELECT max(po),
      CASE name
      WHEN '中国' THEN '亚洲'
      WHEN '印度' THEN '亚洲'
      WHEN '日本' THEN '亚洲'
      WHEN '美国' THEN '北美洲'
      WHEN '加拿大' THEN '北美洲'
      WHEN '墨西哥' THEN '北美洲'
      ELSE '其他' END
    FROM @table group by 
     CASE name
      WHEN '中国' THEN '亚洲'
      WHEN '印度' THEN '亚洲'
      WHEN '日本' THEN '亚洲'
      WHEN '美国' THEN '北美洲'
      WHEN '加拿大' THEN '北美洲'
      WHEN '墨西哥' THEN '北美洲'
      ELSE '其他' END
     替換成一個固定的,應該怎麼寫?????
      

  14.   

    declare @table table (name varchar(20),po int)
    insert into @table select  
    '中国',600 union all
    select '美国',100 union all
    select '加拿大', 100 union all
    select '英国' , 200 union all
    select '法国' , 300 union all
    select '日本' , 250 union all
    select '德国' , 200 union all
    select '墨西哥' , 50 union all
    select '印度' , 250  select
    a.continent,
    sum(PO)
    from
    (SELECT 
      name,
      PO,
      CASE name
        WHEN '中国' THEN '亚洲'
        WHEN '印度' THEN '亚洲'
        WHEN '日本' THEN '亚洲'
        WHEN '美国' THEN '北美洲'
        WHEN '加拿大' THEN '北美洲'
        WHEN '墨西哥' THEN '北美洲'
        ELSE '其他' END as continent
    FROM @table) a
    group by a.continent
      

  15.   

    你也看到了,他对应的国家那个字段的值是各个国家的名字
    现在他想统计的是各个洲的人口数量
    group by使用时该如何用呢?
    通过case when then来达到转换的目的,通过case把国家显示时转换成了各个洲。
    另外case是个整体。后面必须要跟when then else 这个模式================================
    这个是我的理解,如果有错误希望可以指出来
      

  16.   

    不是要減縮代碼!! 我是要弄懂我寫的那個sql是個啥意思.. 我沒整明白! 所以請大家給幫幫忙... 
    group by 後面返回的是值啦,,, 並不是一個列.. 我就不懂了,這也能分組??
      

  17.   


    select 
    case country
       when '中国' then '亚洲'
       when '印度' then '亚洲' 
       when '日本' then '亚洲' 
       when '美国' then '北美洲'
       when '加拿大' then '北美洲'
       else '其它' 
    end  as '名称'
    ,sum([population]) as '总人口'
    from  dbo.Population
    group by 
    case country
       when '中国' then '亚洲'
       when '印度' then '亚洲' 
       when '日本' then '亚洲' 
       when '美国' then '北美洲'
       when '加拿大' then '北美洲'
       else '其它' 
    end  可以实现的,不是直接使用值,而是通过一个虚似的列来进行分组