MySQL重新排列查询结构

时间:2013-09-04 22:27:40

标签: mysql

我正在尝试显示基于我在dbForge Studio中构建的查询的图表,但它没有正确绘图,因为我认为它只选择1个数据轴。

查询显示的结果如下:

column1  column2  column3
data      data     data

我想要正确显示图表,我需要这样的格式:

Type      Total
column1    data
column2    data
column3    data

以下是查询。如何添加像这样的虚拟列并重新排列?

    SELECT 
      (SELECT COUNT(T1.APP_UID)
       FROM TABLE1 T1 
       WHERE T1.APP_STATUS = 'To_Do' ) AS 'Column1' ,

      (SELECT COUNT(T1.APP_UID)
       FROM TABLE1 T1 
       WHERE T1.APP_STATUS = 'Completed' ) AS 'Column2' ,

      (SELECT COUNT(T1.APP_UID)
       FROM TABLE1 T1 ) AS 'Column3'

2 个答案:

答案 0 :(得分:1)

首先,如果你需要一个2列的N行数据集,你的查询应该在“SELECT”之后有两个参数。如果你需要将向上SQLS的结果放入图表中,你应该使用UNION或UNION ALL(阅读http://dev.mysql.com/doc/refman/5.0/en/union.html获取更多信息),如下所示:

(SELECT 'Type', 'Total' FROM DUAL)
UNION [ALL]
(SELECT 'column1', COUNT(T1.APP_UID)
       FROM TABLE1 T1 
       WHERE T1.APP_STATUS = 'To_Do' )
UNION [ALL]
(SELECT 'column2', COUNT(T1.APP_UID)
       FROM TABLE1 T1 
       WHERE T1.APP_STATUS = 'Completed' )
UNION [ALL]
(SELECT 'column3', COUNT(T1.APP_UID)
       FROM TABLE1 T1 )

但是从我看到的情况来看,您可以使用以下内容来获得类似的结果(具有两种状态之一(“已完成,to_do”)的应用数量,以及所有应用的总和。下面的代码假设有表中每个应用状态只有一个条目):

(SELECT T1.APP_STATUS, COUNT(*) FROM TABLE1 T1 WHERE (T1.APP_STATUS = 'To_Do' OR T1.APP_STATUS = 'Completed') GROUP BY T1.APP_STATUS)
UNION ALL
(SELECT 'Altogether', COUNT(T1.APP_UID)
       FROM TABLE1 T1)

答案 1 :(得分:0)

SELECT SUM(T1.APP_STATUS = 'To_Do') FROM T1
UNION SELECT SUM(T1.APP_STATUS = 'Completed') FROM T1
UNION SELECT COUNT(*) FROM T1