2016-11-23 5 views
0
私はこのようなテーブル(私は唯一のユーザーのレコードをしたい。毎回)を転送したい
ID UserId G_NEWS L_NEWS R_NEWS 

1 210 90  160  99 
2 111 89  120  76 


表は、Oracleが

Column_names Values 

G_NEWS  90 
L_NEWS  160 
R_NEWS  99 

次のクエリを使用することにより、私が取得することができます別の方法にに変換します特定のユーザーの価値をどのように得ることができますか。

SELECT COLUMN_NAME 
FROM ALL_TAB_COLUMNS 
WHERE TABLE_NAME='TBL_NEWS'; 
+0

のリストを提供し、動的SQLすることができ..それはOracle、MySQL、またはSql Serverですか? – User

+0

@SrinathこれはOracleです – TechGuy

+2

Oracle 11を使用する場合はunpivotが必要ですhttp://stackoverflow.com/questions/19124891/oracle-unpivot-columns-to-rowsまたはhttp://のようなプリピボット解除前のソリューションpre-11gを使用する場合は、stackoverflow.com/questions/19280591/oracle-pivot-operator – Kacper

答えて

0

簡単な方法は上記のコメント通りです。

create table test_table 
(id number,userid number,g_news number, l_news number, r_news number) 
/
insert into test_table 
VALUES(1,210,90,160,99) 
/
insert into test_table 
VALUES(2,211,89,120,76) 
/
commit 
/

SELECT 'G_NEWS' AS column_name ,g_news AS col_values FROM test_table WHERE id = 1 
union all 
SELECT 'L_NEWS',l_news FROM test_table WHERE id = 1 
union all 
SELECT 'R_NEWS',r_news FROM test_table WHERE id = 1 

結果は次のとおりです。

COLUMN COL_VALUES 
------ ---------- 
G_NEWS   90 
L_NEWS  160 
R_NEWS   99 
+0

G_NEWSのような列名は動的に拡大できます。 – TechGuy

+0

私はそれを明確にするために質問を編集することをお勧めします。 – BriteSponge

1

unpivot がここにサンプルのドキュメントを参照してくださいように聞こえる:unpivot sample 列を動的に変更することができるならば - それはあなたが使用しているRDBMSの列

with matrix as(
select 
    1 as ID 
    ,210 as UserId 
    ,90 as G_NEWS 
    ,160 as L_NEWS 
    ,99 as R_NEWS 
from dual 
union all 
select 
    2 as ID 
    ,111 as UserId 
    ,89 as G_NEWS 
    ,120 as L_NEWS 
    ,76 as R_NEWS 
    from dual) 
select column_name, val from matrix 
unpivot 
(
    val 
    for column_name in ("G_NEWS","L_NEWS","R_NEWS") 
) 
where userId = 111 
order by userId, column_name 

result of test query for user 111: 
1 G_NEWS 89 
2 L_NEWS 120 
3 R_NEWS 76 
+0

PIVOT/UNPIVOTの制限の1つは、column_nameの値が最前面にある必要があることです。 OPは、別のコメントで、より多くの%_NEWS個の列があると述べています。それをどう扱うか分かっているなら、私は非常に興味があります。 – BriteSponge

+0

このスレッドについてはhttp://stackoverflow.com/questions/11881162/unpivot-table-with-multiple-columns-and-dynamic-column-namesをご覧ください。 2番目の答えは、動的SQLについてです – are