我有一張有20列的表格,我喜歡將其分類;如何在SQL/PLSQL的一個語句中對幾個列進行分類
0-25 --> 1
25-50 --> 2
50-75 --> 3
75-100 --> 4
我更喜歡不使用20 case ... when語句。任何人誰知道如何更有效地動態&?可以是SQL或PL/SQL。
我嘗試了一些PL/SQL,但我沒有看到一個簡單的方法來使用列名作爲變量。
非常感謝。
弗蘭斯
我有一張有20列的表格,我喜歡將其分類;如何在SQL/PLSQL的一個語句中對幾個列進行分類
0-25 --> 1
25-50 --> 2
50-75 --> 3
75-100 --> 4
我更喜歡不使用20 case ... when語句。任何人誰知道如何更有效地動態&?可以是SQL或PL/SQL。
我嘗試了一些PL/SQL,但我沒有看到一個簡單的方法來使用列名作爲變量。
非常感謝。
弗蘭斯
的case
聲明可能是做的最有效的方式。更動態的方法是使用with
聲明創建表。下面是代碼示例:
with ref as (
select 0 as lower, 25 as higher 1 as val from dual union all
select 25, 59, 2 from dual union all
select 50, 75, 3 from dual union all
select 75, 100, 4 from dual
)
select ref.val
from t left outer join ref
on t.col >= ref.lower and t.col < ref.higher
這就是說,這個特殊的查詢可以用算術來完成:
select trunc((t.col - 1)/25) + 1 as val
from t
而且,如果你的問題是管理不同的列,你可能會考慮unpivot
。不過,我認爲編寫代碼並在文本編輯器或Excel中修改列名可能更簡單。
你的例子是有點混亂,但假設你希望把一定值這些類別,功能width_bucket
可能是你所追求的:
事情是這樣的:
with sample_data as (
select trunc(dbms_random.value(1,100)) as val
from dual
connect by level < 10
)
select val, width_bucket(val, 0, 100, 4) as category
from sample_data;
這將從sample_data中分配數字1-4到(隨機)值。 0, 100
定義了構建桶的範圍,最後的參數4
說明了應該分配多少個(同樣寬)的桶。該函數的結果是值爲val
的桶。
SQLFiddle示例:http://sqlfiddle.com/#!4/d41d8/10721
我無法在您的示例中看到「20列」。似乎只有一列。你能發表一些「真實的」樣本數據(列/行)和你的陳述的期望輸出嗎? – 2013-05-08 13:25:06