如何在Mysql中使用Select从表中获取查询

时间:2014-11-24 06:04:30

标签: mysql select pivot

我将表格作为名称jual

 Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id_jual    | int(11)     | NO   | PRI | NULL    |       |
| tanggal    | date        | YES  |     | NULL    |       |
| jumlah     | int(4)      | NO   |     | NULL    |       |
| id_obat    | int(11)     | YES  | MUL | NULL    |       |
| id_periksa | int(11)     | YES  | MUL | NULL    |       |
| pemakaian  | varchar(30) | YES  |     | NULL    |       |

当我执行select * from jual“结果时”

 id_jual | tanggal    | jumlah | id_obat | id_periksa | pemakaian |
+---------+------------+--------+---------+------------+-----------+
|       1 | 2014-10-29 |     20 |       1 |          1 | 3x1       |
|       2 | 2014-10-29 |     10 |       5 |          1 | 2x1       |
|       5 | 2014-10-29 |     20 |       8 |          2 | 2x1       |
|       6 | 2014-10-29 |     20 |       1 |          3 | 3x1       |
|      10 | 2014-10-29 |     13 |       5 |          4 | 2x1       |
|      11 | 2014-10-29 |     10 |       8 |          4 | 2x1       |
|      12 | 2014-10-29 |     30 |       1 |          5 | 2x1       |
|      15 | 2014-10-29 |     30 |       3 |          6 | 21        |
|      16 | 2014-10-29 |     20 |       8 |          6 | 3x1       |
|      18 | 2014-10-29 |     30 |       3 |          7 | 1x2       |
|      22 | 2014-10-30 |     20 |       3 |          9 | 1x2       |
|      39 | 2014-10-30 |     10 |       3 |         18 | 1x1       |
|      43 | 2014-10-31 |     15 |       3 |         20 | 2x1       |
|      46 | 2014-10-31 |     10 |       5 |         21 | 2x1       |
|      47 | 2014-11-01 |     20 |       6 |         22 | 1x1       |
|      50 | 2014-11-01 |      7 |       6 |         23 | 1x1       |

我怎样才能得到这样的结果视图:

id_obat   |                         tanggal   
+---------+------------+----------+----------+----------+-----------+
            2014-10-29 |2014-10-30|2014-10-31|2014-11-01|2014-11-02
+---------+------------+----------+----------+----------+-----------+
|  1      | 20.20.30   |          |          |          |            |
|  3      | 30.30      | 20.10    | 15       |          |            |
|  5      | 10.13      |          | 10.      |          |            |
|  6      |            |          | 20.7     |          |            |
|  8      | 20.10.20   |          |          |          |            |
+---------+------------+----------+----------+----------+------------+

请帮我解决我的问题..... !!!!

2 个答案:

答案 0 :(得分:0)

您可以使用动态数据透视语句执行此操作:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(tanggal = ''',
      tanggal,
      ''', val, NULL)) AS ''',
      tanggal,
      ''''
    )
  ) INTO @sql
FROM jual;

SET @sql = CONCAT('
       SELECT id_obat, ', @sql, ' 
       FROM (
         SELECT 
           tanggal, 
           id_obat, 
           GROUP_CONCAT(jumlah SEPARATOR ''.'') AS val 
         FROM jual
         GROUP BY tanggal, id_obat
         ORDER BY id_jual) AS DERIVED_TABLE
       GROUP BY id_obat;');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

请参阅此sample SQL Fiddle

结果与您的样本输出不完全匹配,但我认为这是因为样本输出不正确,因为值20.7应该在2014-11-01之下,而不是像样本一样在2014-10-31

答案 1 :(得分:0)

SELECT tangaal, id_obat, GROUP_CONCAT( jumlah ) AS jumlah 
FROM  `jual` 
GROUP BY tangaal, id_obat

这将输出为

tangaal     |   id_obat     |   jumlah      |
------------+---------------+---------------+
2014-10-29  |   1           |   20,30,20    |
------------+---------------+---------------+
2014-10-29  |   3           |   30,30       |
------------+---------------+---------------+
..............