Oracle 10g
を考慮すると、指定された行に基づいて列の名前を変更する方法はありますか?SQL:行の値に基づいた列の動的な名前変更
まず背景を教えてください。必要条件は、行をピボットして列にすることでした。 Oracleの10gは、関数PIVOTをサポートしていないので、我々はmax and case
キーワードを使用して周りに仕事をしてきました。
さて問題は、このです。 2つの行に基づいて列の名前を変更する方法はありますか? ATTRIBUTE_NAME`別用として - `column header for one and the
COMPONENT_NAMEように変形上記COMPONENT_NAME
と:
BRAND | MODEL | COMPONENT_NAME | COMPONENT_VALUE | ATTRIBUTE_NAME | ATTRIBUTE_VALUE
-----------------------------------------------------------------------------------
SAMSUNG | I9100 | Chipset | Exynos | frequency | 1200
SAMSUNG | I9100 | Screen | Amoled | colors | 16M
SAMSUNG | I9100G | Chipset | TI OMAP4430 | frequency | 1200
SAMSUNG | I9100G | Screen | Amoled | colors | 16M
------------------------------------------------------------------------------------
我々はこれをしたい: は以下の表を考えます。
SELECT DISTINCT BRAND, MODEL,
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset') THEN
COMPONENT_VALUE
END) AS "Chipset",
MAX(CASE WHEN (COMPONENT_NAME = 'Chipset' and ATTRIBUTE_NAME = 'frequency') THEN
ATTRIBUTE_VALUE
END) AS "Screen",
MAX(CASE WHEN (COMPONENT_NAME = 'Screen') THEN
COMPONENT_VALUE
END) AS "Screen",
MAX(CASE WHEN (COMPONENT_NAME = 'Screen' and ATTRIBUTE_NAME = 'colors') THEN
ATTRIBUTE_VALUE
END) AS "Screen - colors" from table....etc.
動的に列に名前を付ける方法はあります:現在
BRAND | MODEL | Chipset | Chipset - frequency | Screen | Screen - colors
------------------------------------------------------------------------
SAMSUNG | I9100 | Exynos | 1200 | Amoled | 16M
SAMSUNG | I9100G | TI OMAP4430 | 1200 | Amoled | 16M
------------------------------------------------------------------------
我々は、第二のテーブルを生成するために、次のですか?
@GauravSoni neccessaryだろうよりもハードパースですバック。文法上の誤りや不要なインラインタグを再導入して便利なタグを削除したことはありますか? – Ben
@ben:申し訳ありませんが、実際にあなたの編集部分を見たことはありません。あなたがあなたの編集でコミットしたときかもしれません。あなたの変更を元に戻すことができます。 –