2015-06-18 122 views
-1

我是第一次發佈海報,也是SQL的新手,我的同事也是。
我有一列數字(讓我們只是把它稱爲「數字」)和值的範圍是1-9999從。
我需要創建一個分組列(姑且稱之爲「數字級」),並從1-999從1000-6999和CC AA分配的值的所有號碼,BB爲7000-9999。
所以,最後的結果將類似於下面(輸出並不需要訂購):SQL:數字範圍的GROUP BY?

numbers  | numbers level 
------------------------------------- 
    136  |  AA 
    2935  |  BB 
    4288  |  BB 
    8987  |  CC 
    436  |  AA 
    3737  |  BB 

有沒有簡單的方法來此腳本,即:通過使用GROUP BY子句?
或是否是分組列必須已經存在,我只是需要一個命令來填充它?

請讓我知道,如果我的問題才搞的稀裏糊塗的,我會澄清盡我所能。

+2

沒有分組要完成,您應該生成帶有CASE語句的「數字級別」列。谷歌了。 –

回答

6

這將是最簡單的一個case語句(假設你使用SQL服務器;如果沒有,請添加標籤的正確版本)。

Select [Numbers] 
    , case when [Numbers] between 1 and 999 then 'AA' 
     when [Numbers] between 1000 and 6999 then 'BB' 
     when [Numbers] between 7000 and 9999 then 'CC' 
    end as [Numbers Level] 
from MyTable 

如果您的號碼不屬於上述範圍,則返回NULL - 如果你想要一個不同的結果發生這種情況時使用else

+0

這根據需要工作!非常感謝您幫助我進入SQL的第一步。 –

+0

@StanDarsh樂意幫忙!如果這解決了您的問題,請接受答案。 – APH

3

分組列必須存在,但你可以使用一個case代替。

select nr, 
     case when nr <= 999 then 'AA' 
      when nr <= 7000 then 'BB' 
     else 'CC' 
     end as NrLevel 
from Numbers 
+1

我同意這個解決方案將起作用。但是,如果上移或下移語句會使所有內容都受到影響 –

+0

是的。所以不要這樣做。你會發現,如果你從'select nr'上面的'Numbers'移動它也不起作用。 – GolezTrol

+1

也可以通過分配所有這些值「CC」來掩蓋問題,如果數字超出預期範圍。 – APH

1

你並不真的需要一批在這裏,你可以使用一個簡單的case語句完成它。

SELECT number, 
CASE WHEN number between 1 and 999 THEN 'AA' 
    WHEN number between 1000 and 6999 THEN 'BB' 
    WHEN number between 7000 and 9999 then 'CC' 
    END numbers_level 
from Number_table 
+0

請避免重複的答案 –

+0

當每個人在59秒之內彼此回答時,這很難做到。 –

+0

真的...發佈前不到一分鐘..對不起,我不刷新我的瀏覽器每10秒,以避免它... – Gene