2017-03-29 15 views
1

hql(またはmysql)では、desiredViewを呼び出すhql(またはmysql)クエリを作成します。私は3つのテーブルを持っています。私はそれらを表A、表B、表Cと呼んでいます。 そして私は望みたい視野を持っています。カラム名としてUNKNOWNのデータを表示

Table A 
Aid   RegNum BID   Value 
2CE7D0A7 2000000 D5981DFC 1 
9D3C13AA 2000000 C58566C5 32 
9DDB90C4 2000000 812E9E75 5343 

表Bは

Table B 

BID    ColumnName    Index 
D5981DFC  Question1    0 
C58566C5  Question2    1 
812E9E75  Question3    2 

表Cは、同様に、表Aに外部キーを持つ表A、表Bの外部キーによって、表Aに接続されています。 Reg Num。 REG numがC

表の主キーである
Table C 

Name  Surname  RegNum 
Etibar  Hasanov  2000000 

あなたは、テーブルAとテーブルBの3行がある例では、表B

DesiredView 
Name  Surname  RegNum  Question1  Question2  Question3 
Etibar  Hasanov  2000000  1    32    5343 

に件のデータある列の名前があります見ての通り、それを私はそれが静的だった場合、私はケースを使用できることを知っています。しかし、私は列の数がテーブルBの質問の数に依存しているクエリを探しています。それは3つの質問があり、合計で4つがあれば7のようにdesiredViewに6つの列があります。

答えて

0

MySQLでプロシージャを作成すると、必要な動的な動作を実現できます。

プロシージャを作成し、プロシージャ内に以下のコードを追加すると、動的出力が提供されます。

SELECT GROUP_CONCAT('SUM(IF(B.ColumnName = ''', ColumnName, ''', A.Value, 0)) AS ', ColumnName) INTO @str 
FROM TableB; 

SET @s = CONCAT('select C.Name, C.Surname, C.RegNum, ', @str, 'from TableC C inner join TableA A on C.RegNum = A.RegNum inner join TableB B on A.BID = B.BID group by C.RegNum'); 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
関連する問題