Mysql 将未知数量的数据显示为列名
在hql(或mysql)中,我想创建一个hql(或mysql)查询,它提供了所需的视图。我有三张桌子。我把它们叫做表A、表B、表C。 我有我想要的观点Mysql 将未知数量的数据显示为列名,mysql,sql,select,stored-procedures,hql,Mysql,Sql,Select,Stored Procedures,Hql,在hql(或mysql)中,我想创建一个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 Ta
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中有一些列的名称是数据
DesiredView
Name Surname RegNum Question1 Question2 Question3
Etibar Hasanov 2000000 1 32 5343
在这个例子中,表A和表B中有3行,它不是静态的,我知道如果它是静态的,我可以使用case。然而,我正在寻找的查询中,列的数量取决于表B中的问题数量,如果有3个问题,那么desiredView中总共有6列,如果有4列,则有7列,依此类推 如果在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;
如果在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;