2012-05-03 65 views
2

我想確定2個類別的範圍。 A類和B類A開始從1至15,B開始從16到31然後再次從32開始40. 現在如果運行此查詢SQL數據範圍最小最大類別

select min(range), max(range) 
from table 
group by category 
order by category 

它給我範圍A類從1到40和B類從16到31.我想打破範圍,並希望看到結果

Category A 1 to 15 
Category B 16 to 31 
Category A 32 to 40 

我該怎麼做?我需要第三欄嗎?我知道如果我有第三列新類別可以說C D E分別,我可以按這些組合,並得到結果。但我不知道該怎麼做。

請幫助我。

感謝 -Adeel

+0

您使用的是什麼RDBMS? –

+0

你用來確定合適的範圍的標準是什麼?特別是,範圍必然是整數的序列?也就是說,如果第一個範圍缺少「8」,它會是一個還是兩個? –

回答

1

假設你正在試圖打破類別成由連續整數的組,那麼下面的工作:

select category, diff, min(range), max(range) 
from 
(
    select category, range, 
     (range - row_number() over (partition by category order by range)) as diff 
    from table 
) t 
group by category 
order by 1, 3 

此查詢基於這樣的觀察,對一類特定分組內,該數字依次增加。因此,減去一個整數序列將導致一個常數,然後可以用它來識別該特定範圍。

Row_Number()是標準的SQL函數,所以它在大多數數據庫中都可用。

+0

嗨戈登。這是一個非常好的例子,我現在會嘗試並讓你知道。 – Mozung

+0

戈登,我只是試過你的代碼,它像一個魅力工作。我很開心。 :D – Mozung

+0

非常感謝! – Mozung

0

這聽起來像一個recursive CTE應該爲你工作,但它取決於你的RDBMS如何這可能是工作(如果它甚至支持),但你很可能要做一些增量計數可以用作每個片段的乘數,直到達到最大限制。如果你讓我們知道RDBMS,我可以舉一個例子。

+0

嗨賈斯汀,CTE是允許的,我可以在這些工作。請給我舉個例子。謝謝 – Mozung