在hql(或mysql)中,我想创建带有desiredView的hql(或mysql)查询。我有三张桌子。我把它们称为表A,表B,表C. 而且我希望得到我想要的观点。
Table A
Aid RegNum BID Value
2CE7D0A7 2000000 D5981DFC 1
9D3C13AA 2000000 C58566C5 32
9DDB90C4 2000000 812E9E75 5343
表B通过表A中的表B的外键与表A连接
Table B
BID ColumnName Index
D5981DFC Question1 0
C58566C5 Question2 1
812E9E75 Question3 2
表C也有表A中的外键。 Reg Num。 Reg num是表C中的主键
Table C
Name Surname RegNum
Etibar Hasanov 2000000
如您所见,列B的名称是表B中的数据
DesiredView
Name Surname RegNum Question1 Question2 Question3
Etibar Hasanov 2000000 1 32 5343
在示例中,表A和表B中有3行,它不是静态的,我知道如果它是静态的我可以使用case。然而,我正在寻找查询,其中列数取决于表B中的问题数量,它有3个问题,然后总共我将在desiredView中有6列,如果4将有7等等。
答案 0 :(得分: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;