首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL存储过程或动态视图

MySQL存储过程或动态视图
EN

Stack Overflow用户
提问于 2014-04-30 13:24:05
回答 1查看 749关注 0票数 0

我有以下准备好的语句来运行跨三个表的动态枢轴查询

代码语言:javascript
复制
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT(
    'max(case when division_id = ', dp.division_id, ' then process_name end) AS ', d.division_shortName, ' '
    )
) INTO @sql
FROM 
    erp_divisionProcess dp LEFT JOIN erp_division d ON d.division_id = dp.division_id;
SET @sql = concat('SELECT ', @sql, 'FROM (
    SELECT d.division_id, p.process_name, X.rnk
    FROM erp_division d
    LEFT JOIN (SELECT dp.division_id, dp.process_id, (SELECT COUNT(*) FROM erp_divisionProcess A WHERE dp.division_id = A.division_id AND dp.process_id < A.process_id) AS rnk
    FROM erp_divisionProcess dp) X ON X.division_id = d.division_id
    LEFT JOIN erp_BusinessProcess p ON p.process_id = X.process_id 
) x
GROUP BY rnk');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

它生成如下所示的旋转数据集:

代码语言:javascript
复制
+-----------------+-----------------+------------+------------+--------------+------------+------------+-------+
| PBL             | PLI             | PMI        | PBT        | PBP          | PBI        | PBTL       | PRDT  |
+-----------------+-----------------+------------+------------+--------------+------------+------------+-------+
| Sales           | Human Resources | Production | Purchasing | Sales        | Purchasing | Purchasing | Sales |
| Human Resources | Purchasing      | NULL       | NULL       | Purchasing   | NULL       | NULL       | NULL  |
| Purchasing      | Finance         | NULL       | NULL       | Distribution | NULL       | NULL       | NULL  |
| Distribution    | NULL            | NULL       | NULL       | Production   | NULL       | NULL       | NULL  |
| Production      | NULL            | NULL       | NULL       | NULL         | NULL       | NULL       | NULL  |
| Finance         | NULL            | NULL       | NULL       | NULL         | NULL       | NULL       | NULL  |
+-----------------+-----------------+------------+------------+--------------+------------+------------+-------+

我希望生成的数据集可以进入Excel,但是当我尝试运行完整的语句时,MS查询会抛出并出错。我相信我无法从准备好的语句中创建视图,所以如何才能使查询结果可用,而不必每次重新键入(复制和粘贴)并从MySQL中获取结果。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-04-30 14:00:14

我认为我无法从准备好的语句中创建视图,那么如何才能使查询结果可用而不需要重新键入(复制和粘贴)

可以使用准备好的查询创建view

尝试在代码中进行以下更改:

代码语言:javascript
复制
-- SET @sql = concat('SELECT ', @sql, 'FROM (
SET @sql = concat( 'CREATE VIEW view_name AS SELECT ', @sql, ' FROM (
    SELECT d.division_id, p.process_name, X.rnk
    FROM erp_division d
    LEFT JOIN (SELECT dp.division_id, dp.process_id, 
                      (SELECT COUNT(*) FROM erp_divisionProcess A 
                        WHERE dp.division_id = A.division_id 
                          AND dp.process_id < A.process_id) AS rnk
                 FROM erp_divisionProcess dp) X 
           ON X.division_id = d.division_id
    LEFT JOIN erp_BusinessProcess p ON p.process_id = X.process_id 
) Y
GROUP BY rnk');

一旦创建了视图,就可以发出一个select * from view_name将数据提取到客户端。

Demo @ http://sqlfiddle.com/#!2/fd33e/1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23389333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档