2017-03-29 39 views
1

在hql(或mysql)中,我會創建帶有desiredView的hql(或mysql)查詢。我有三張桌子。我稱他們爲表A,表B,表C.我想要得到的視圖。顯示UNKNOWN數據的數據爲列名

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

表B在表A連接到表A由表B的外鍵

Table B 

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

表C具有表的外鍵爲好。註冊號REG num是在表主密鑰C

Table C 

Name  Surname  RegNum 
Etibar  Hasanov  2000000 

正如所看到的有列的名稱,其是DATAS表B

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

在該例子中有在表A和表B中3行,它不是靜態的,我知道如果它是靜態的,我可以使用大小寫。不過,我正在查詢哪些列的數量取決於表B中的問題數量,總共有3個問題,我將在desiredView中有6列,如果4將有7個等等。

回答

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;