97列のテーブルがあり、96列を合計したいと思います。
select sum(col1+col2+col3+.....+col96)
from tableA where meter_id=x;
96列すべてに名前を付けたくないのですが、それを行うための最良の方法は何ですか?よろしく、RR
97列のテーブルがあり、96列を合計したいと思います。
select sum(col1+col2+col3+.....+col96)
from tableA where meter_id=x;
96列すべてに名前を付けたくないのですが、それを行うための最良の方法は何ですか?よろしく、RR
各列名を書かないようにする方法はありません。あなたにできることは、愚かなデータモデラーを呪い、カットアンドペーストで忙しくすることだけです。
かなりの数の列がある場合は、次のようなクエリを使用してデータ ディクショナリ テーブルを使用してクエリを作成することを検討します。
Select column_name || '+' as column_name_list
From user_tab_columns
Where table_name = 'TABLEA'
Order by column_id
それは世界を変えるものではありませんが、1 つのクエリを書くことを単純化します。
次のように、96列を合計する仮想列を作成できます。
alter table TABLEA add (MY_TOTAL_COL NUMBER GENERATED ALWAYS AS (col1+col2+col3...) VIRTUAL);
次に、クエリは単純に実行できますsum(my_total_col)
。
以下の例に従ってUNPIVOTを使用してみてください(他の人が指摘したように、列リストを指定する必要があります):
with tableA as /* prototype tableA just for example */
(
select 1 meter_id, 101 col1, 10 col2, 20 col3, 30 col4, NULL col5, 101 col11, 10 col12, 20 col13, 30 col14, NULL col15, 101 col21, 10 col22, 20 col23, 30 col24, NULL col25 from dual union
select 2, 102, 40, NULL, 50, NULL, 102, 40, NULL, 50, NULL, 102, 40, NULL, 50, NULL from dual union
select 3, 103, 60, 70, 80, 90, 103, 60, 70, 80, 90, 103, 60, 70, 80, 90 from dual union
select 4, 104, 100, NULL, NULL, NULL, 104, 100, NULL, NULL, NULL, 104, 100, NULL, NULL, NULL from dual
)
, unpivoted_tableA as /* UNPIVOT tableA columns into rows */
(
select *
from tableA
unpivot include nulls
(
col_value for col_ in
(COL1,COL2,COL3,COL4,COL5,COL11,COL12,COL13,COL14,COL15,COL21,COL22,COL23,COL24,COL25)
)
)
/* main query - Sum of all columns that were unpivoted to rows */
select meter_id, sum(col_value)
from unpivoted_tableA
group by meter_id
;