2014-11-24 52 views
0

使用选择我有表姓名jual我怎样才能查询从表在MySQL

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 |   |   |   |   | 
+---------+------------+----------+----------+----------+------------+ 

请帮我与我的问题..... !!!!

+0

你想要的是一个数据透视表,一般需要报告或电子表格软件,或更高级的数据库,如MS SQL。这里是一个类似的问题:http://stackoverflow.com/questions/7674786/mysql-pivot-table – Sheepy 2014-11-24 06:10:13

回答

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。

+0

是的,这是真的,但我如何创建视图上面的枢轴声明? – user1191933 2014-11-25 11:08:38

+0

@ user1191933如果你希望它是动态的,我不认为你可以使用视图,因为我记得视图不能包含动态代码。 – jpw 2014-11-25 11:23:11

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  | 
------------+---------------+---------------+ 
.............. 
+0

感谢您的回复:-D – user1191933 2014-11-25 11:09:14