Mysql 如何将存储过程转换为单个SQL语句
我的数据库中有一个表,看起来像(表中可以有相同的元组): 我必须在as之后显示结果(Branch属性是动态的): 经过一些帮助,我想出了以下解决方案:Mysql 如何将存储过程转换为单个SQL语句,mysql,Mysql,我的数据库中有一个表,看起来像(表中可以有相同的元组): 我必须在as之后显示结果(Branch属性是动态的): 经过一些帮助,我想出了以下解决方案: SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''', branch, ''' then status en
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''', branch, ''' then status end),''OK'') AS ', CONCAT('Branch',branch) ) ) INTO @sql FROM Table1; SET @sql = CONCAT('SELECT productName, ', @sql, ' FROM Table1 GROUP BY productName'); PREPARE stmt FROM @sql; EXECUTE stmt; .
我希望将此过程转换为单个SQL语句。我试过了,但找不到解决办法。我怎样才能做到这一点?感谢这个精确的结果(因为它是由存储过程生成的,在运行时确定列数),不能在单个SQL select语句中重现。这是不可能的。这个精确的结果(因为它是由存储过程生成的,在运行时确定列数),不能在单个SQL select语句中复制。这是不可能的。< /P>我们可以考虑<代码>调用SPNED(…)>代码>一个语句吗?我们可以考虑<代码>调用SPNED(…)>代码>一个语句吗?
+-------------+---------+--------+
| ProductName | Branch 1|Branch 2|
+-------------+---------+--------+
| P1 | dead | dead|
| P2 | expired | OK |
+-------------+---------+--------+
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''',
branch,
''' then status end),''OK'') AS ',
CONCAT('Branch',branch)
)
) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT productName, ', @sql, '
FROM Table1
GROUP BY productName');
PREPARE stmt FROM @sql;
EXECUTE stmt;
+-------------+---------+-----------+
| productName | Branch1 | Branch2 |
+-------------+---------+-----------+
| p1 | dead | dead |
| p2 | expired | OK |
+-------------+---------+-----------+