如何将mySQL的结果从行显示到列?

时间:2014-08-11 13:43:19

标签: mysql

我有一个包含大量相同ID行的表。例如,如果我在mySQL中查询以下内容:

......WHERE ID=10 OR ID = 11 OR ID=38 OR ID=49....

我会得到如下结果

id ---- visits ---- turnover ---- cost
10 ---- 20 ------- 10.000 ---- 500
11 ---- 43 ------ 190 ----- 200
and so on...

我的问题是如何以这样的方式呈现表格:

            id ------ id ----- id
            10 ------ 11 ------ *****
visits      20------- 43 ------ *****
turnover    10.000 --- 190 ---- *****
cost        500 ----- 200 ------- ****

我的查询。以上示例仅用于示例目的

jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver", classPath="lib/ojdbc6.jar")
jdbcConnection <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@//database.hostname.com:port/service_name_or_sid", "username", "password")
MyData <- dbGetQuery(jdbcConnection,"SELECT VALUE,DATA_POINT_DATE
FROM HD.HD_SE_HAM 
WHERE TE_ID = 02342
and end_date = to_date('31/12/9999', 'dd/mm/yyyy')
and DATA_SKATA_DATE  Between '01-Jan-10 ' and  '30-Jun-13'
order by data_skata_date asc")

1 个答案:

答案 0 :(得分:0)

好的,所以这是你想要的一个解决方案......

注意:

我完全建议你不要在mysql中执行此操作..但是在获得结果后,您应该使用其他编程语言。

SETUP:

CREATE TABLE HAM (
    id INT,
    visits INT,
    turnover INT,
    cost INT
);
INSERT INTO HAM VALUES
(10 , 20 , 10.000 , 500),
(11, 43 , 190  ,200),
(12, 53 , 180  ,100),
(13, 63 , 170  ,400),
(14, 73 , 160  ,500),
(15, 83 , 150  ,600),
(16, 93 , 140  ,700),
(17, 103,  130 , 800),
(18, 113,  120 , 900),
(19, 123,  110 , 1000),
(20, 133,  100 , 1100),
(21, 143,  90  ,1200);

QUERY:

(   SELECT
        ' ',
        MAX(CASE id WHEN 10 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 11 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 12 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 13 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 14 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 15 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 16 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 17 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 18 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 19 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 20 THEN id ELSE ' ' END) AS 'ID',
        MAX(CASE id WHEN 21 THEN id ELSE ' ' END) AS 'ID'
    FROM HAM
)

UNION

(   SELECT
        'VISITS',
        MAX(CASE id WHEN 10 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 11 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 12 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 13 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 14 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 15 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 16 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 17 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 18 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 19 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 20 THEN visits ELSE ' ' END),
        MAX(CASE id WHEN 21 THEN visits ELSE ' ' END)
    FROM HAM
)

UNION

(   SELECT
        'TURNOVER',
        MAX(CASE id WHEN 10 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 11 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 12 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 13 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 14 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 15 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 16 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 17 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 18 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 19 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 20 THEN turnover ELSE ' ' END),
        MAX(CASE id WHEN 21 THEN turnover ELSE ' ' END)
    FROM HAM
)

UNION

(   SELECT
        'COST',
        MAX(CASE id WHEN 10 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 11 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 12 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 13 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 14 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 15 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 16 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 17 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 18 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 19 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 20 THEN cost ELSE ' ' END),
        MAX(CASE id WHEN 21 THEN cost ELSE ' ' END)
    FROM HAM
);

输出:

+---------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|         | 10   |  11   |  12   |  13   |  14   |  15   |  16   |  17   |  18   |  19   |  20   |  21   |
| VISITS  | 20   |  43   |  53   |  63   |  73   |  83   |  93   |  103  |  113  |  123  |  133  |  143  |
| TURNOVER| 10   |  190  |  180  |  170  |  160  |  150  |  140  |  130  |  120  |  110  |  100  |  90   |
| COST    | 500  |  200  |  100  |  400  |  500  |  600  |  700  |  800  |  900  |  1000 |  1100 |  1200 |
+---------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+