将未知数据数显示为列名

时间:2017-03-29 11:33:34

标签: mysql sql select stored-procedures hql

在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等等。

1 个答案:

答案 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;